摘要: 描述全排列就是n个不同元素排成一列,我们不妨可以简单地将n个元素理解为自然数1,2,…,n。现假设不同的全排列按照字典序自动从小到大排,123…n的序号为零。编程读入n、m,输出序号为m(mint main(){ char e[21]={0}; long s[21]={1},m,j,k,l; int i,n; scanf("%d%ld",&n,&m); m=m+1; s[0]=1; for(i=1;i=0;i--) { j=(m-1)/s[i]+1;l=0;k=0; do{ k++; ... 阅读全文
posted @ 2013-11-22 10:35 七年之后 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 描述在一个nxn个方格组成的棋盘上的任一方格中放置一个皇后,该皇后可以控制他所在 的行,列以及对角线上的所有方格。对于给定的自然数n,在nxn个方格组成的棋盘上最少要放置多少个皇后才能控制棋盘上的所有方格,且放置的皇后互不攻击?设计一个拉斯维加斯算法,对于给定的自然数n (1£ n £100)计算在nxn个方格组成的棋盘上最少要放置多少个皇后才能控制棋盘上的所有方格,且放置的皇后互不攻击。输入输入的第一行有1个正整数n。输出输出计算出最少皇后数及最佳放置方案,第一行是最少皇后数;接下来的1行是皇后的最佳放置方案。样例输入8样例输出5 0 3 6 0 0 2 5 8 #inc 阅读全文
posted @ 2013-11-22 10:34 七年之后 阅读(1533) 评论(0) 推荐(0) 编辑
摘要: 描述给定2 个n×n矩阵a 和b,试设计一个判定a 和b 是否互逆的蒙特卡罗算法,算法的计算时间应为O(n2)。设计一个蒙特卡罗算法,对于给定的矩阵a和b,判定其是否互逆。输入 输入的第一行有1个正整数n,表示矩阵a和b 为n×n矩阵。接下来的2n行,每行有n个实数,分别表示矩阵a和b 中的元素。输出矩阵a 和b 互逆则输出YES,否则输出NO。样例输入3 1 2 3 2 2 3 3 3 3-1 1 0 1 -2 1 0 1 -0.666667 样例输出YES#include#include#define N 20int main(){ //freopen("a. 阅读全文
posted @ 2013-11-22 10:33 七年之后 阅读(946) 评论(0) 推荐(0) 编辑
摘要: 描述在n×n 格的棋盘上放置彼此不受攻击的n 个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在n×n格的棋盘上放置n个皇后,任何2 个皇后不放在同一行或同一列或同一斜线上。设计一个解n 后问题的队列式分支限界法,计算在n´ n个方格上放置彼此不受攻击的n个皇后的一个放置方案。输入 第一行有1 个正整数n。输出 将计算出的彼此不受攻击的n个皇后的一个放置方案输出。第1行是n个皇后的放置方案。样例输入5样例输出1 3 5 2 4#includeusing namespace std;bool place(int k,i 阅读全文
posted @ 2013-11-22 10:32 七年之后 阅读(582) 评论(0) 推荐(0) 编辑
摘要: 描述设有n种不同面值的硬币,各硬币的面值存于数组T[1:n]中。现要用这些面值的硬币来找钱。可以使用的各种面值的硬币个数存于数组Coins[1:n]中。对任意钱数0≤m≤20001,设计一个用最少硬币找钱m的方法。对于给定的1≤n≤10,硬币面值数组T和可以使用的各种面值的硬币个数数组Coins,以及钱数m,0≤m≤20001,编程计算找钱m的最少硬币数。输入输入的第一行中只有1个整数给出n的值,第2行起每行2个数,分别是T[j]和Coins[j]。最后1 行是要找的钱数m。输出输出计算的最少硬币数,问题无解时输出-1。样例输入3 1 3 2 3 5 3 18 样例输出5#includeusi 阅读全文
posted @ 2013-11-22 10:30 七年之后 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 描述大于1 的正整数n可以分解为:n=x1*x2*…*xm。 例如,当n=12 时,共有8 种不同的分解式: 12=12; 12=6*2; 12=4*3; 12=3*4; 12=3*2*2; 12=2*6; 12=2*3*2; 12=2*2*3。 对于给定的正整数n,编程计算n共有多少种不同的分解式。 输入输入的第一行有1个正整数n (1≤n≤2000000000)。输出输出计算出的不同的分解式数。样例输入12样例输出8#include#include#includeusing namespace std;int main(){ int n,a[10000],dp[10000]; ... 阅读全文
posted @ 2013-11-22 10:29 七年之后 阅读(574) 评论(0) 推荐(0) 编辑
摘要: 描述一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1,2,…,9。给定表示书的总页码的10 进制整数n (1≤n≤109) 。编程计算书的全部页码中分别用到多少次数字0,1,2,…,9。输入输入只有1 行,给出表示书的总页码的整数n。输出输出共有10行,在第k行输出页码中用到数字k-1 的次数,k=1,2,…,10。样例输入11样例输出1 4 1 1 1 1 1 1 1 1 #include #in 阅读全文
posted @ 2013-11-22 10:27 七年之后 阅读(388) 评论(0) 推荐(0) 编辑
摘要: 描述给定一个点分十进制的IP地址,把这个IP地址转换为二进制形式。 输入输入只有一行,一个点分十进制的IP地址 包括四个正整数,用三个.分开,形式为a.b.c.d其中0#includeusing namespace std;int a[8]={0};void TenToTwo(int n){ int i=0,j; if(n==0) { cout=0;j--) cout>s; int len=s.length(); int i; int temp=0; for(i=0;i<len;i++) { if(s[i... 阅读全文
posted @ 2013-11-22 10:26 七年之后 阅读(405) 评论(0) 推荐(0) 编辑
摘要: 描述高斯是德国著名数学家、物理学家、天文学家、几何学家,有“数学王子”的美誉。18岁的高斯发现了质数分布定理和最小二乘法。通过对足够多的测量数据的处理后,可以得到一个新的、概率性质的测量结果。在这些基础之上,高斯随后专注于曲面与曲线的计算,并成功得到高斯钟形曲线(正态分布曲线)。其函数被命名为标准正态分布(或高斯分布),并在概率计算中大量使用。在高斯19岁时,仅用尺规便构造出了17边形。并为流传了2000年的欧氏几何提供了自古希腊时代以来的第一次重要补充。高斯总结了复数的应用,并且严格证明了每一个n阶的代数方程必有n个实数或者复数解。在他的第一本著名的著作《算术研究》中,作出了二次互反律的证明 阅读全文
posted @ 2013-11-22 10:25 七年之后 阅读(1145) 评论(0) 推荐(0) 编辑
摘要: 描述“丑陋数”是指那些质因子只包含2,3或5的数(可以都不包含,所以1也是一个“丑陋数”)。数列1,2,3,4,5,6,8,9,10,12,...给出了前十个“丑陋数”。 给出正整数n,请输出第n个“丑陋数”。 输入每行仅有一个正整数n(n#includeusing namespace std;int max(int a,int b){ return a>=b?(a):(b);}int min(int a,int b){ return a A,B,C,S;int main(){ int i,temp,n; i=1; S.push_back(1); int r... 阅读全文
posted @ 2013-11-22 10:17 七年之后 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 描述每一个数字都有自己的实力,我们可以从不同的角度来描述数字的实力。我们做出如下定义:一个数字n的实力是它所拥有的因数个数。例如:6的实力是4 ,因为它有4个因数(1,2,3,6)。 现在我们需要知道从1开始到某一个数n中,哪个数字拥有最强的实力。 输入一个正整数n ( 0using namespace std;#define MAX 500000int prime[MAX];bool a[MAX];int cnt;void Initprime()//?????????{ int i, j; cnt = 0; for( i=2; i>n; max=1;t=1; ... 阅读全文
posted @ 2013-11-22 10:15 七年之后 阅读(1126) 评论(0) 推荐(0) 编辑
摘要: 描述一位秘书在距离家以东n个街区,以北m个街区的一座大楼里工作。每天他要步行5个街区上班。(右图为n=3,m=2时的情形)。对于他来说可能有多少种不同的上班路线f(n,m)(上班是件敢时间的事情,他的行进速度保持不变,他需要尽可能早到达公司)输入输入包括一行,两个正整数n,m ( 0 #includeint qkpass(int *r,int left,int right){ int i,j, x=r[left]; i=left; j=right; while(i=x) j--; if(i<j) { ... 阅读全文
posted @ 2013-11-22 10:14 七年之后 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 描述设有n个活动的集合E={1,2,……,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si=fj或者sj>=fi时,活动i与活动j相容。活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合。 但在现实生活中,不同的活动所带来的价值和意义是不一样的,所以我们可以为每个活动附上一个权值,现在的问题就是要在所给的活动集合中选出权值和最大的相容活动子集合。 输入第一行输入一个正整数n(1#includeusing namespace std;inline int maxx 阅读全文
posted @ 2013-11-22 10:12 七年之后 阅读(716) 评论(0) 推荐(0) 编辑
摘要: 描述给出N个整数X1,X2,X3,……,XN,将这N个数从小到大排序为A1,A2,A3,……,AN,记数列A1,A2,A3,……,AN的奇数项之和为P,偶数项之和为Q,令T=|P-Q|,求出T的值。 输入 第一行为整数N(1#include using namespace std;int main(){ int num,temp,i; int Q=0,T=0;// int a; scanf("%d",&num); priority_queue pq; for(i=0;i0) cout<<p<<endl; else cout<... 阅读全文
posted @ 2013-11-22 10:10 七年之后 阅读(303) 评论(0) 推荐(0) 编辑
摘要: 描述 飞弹能够沿固定方向摧毁高度递减的目标。现在已知一直线上从左到右各个目标的高度。需要你求出飞弹最多能够摧毁多少目标。飞弹自最左端发射,起始高度任意,从左至右摧毁目标。 输入第一行是一个正整数n(1using namespace std;int main(){ int n,*a,*count,i,j,max; cin>>n; a=new int[n]; count=new int[n]; for(i=0;i>a[i]; count[i]=1; } for(i=n-1;i>=0;i--) { max=0; ... 阅读全文
posted @ 2013-11-22 10:09 七年之后 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 描述A城是由许多小城镇组成的,在A城的各个小城镇间建了许多道路(道路是双向的)。这些道路是A城便利交通的基础。游客通过这些道路可以在任意两个城镇之间往返。最近市长对这座城市错综复杂的交通感到厌烦,决定重新规划A城的道路。所以他派给你一个任务:留下尽可能少的道路,保证任意两个城镇之间还是可达的。将其他多余的道路全部拆除。 输入第一行为两个正整数n(1using namespace std;#define MAXT 1001#define MAXK 31inline int max(int a,int b){ return a>b?a:b;}int main(){ int t,k,i,... 阅读全文
posted @ 2013-11-22 10:07 七年之后 阅读(303) 评论(0) 推荐(0) 编辑
摘要: 描述一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢? 输入输入数据有若干组,每组数据包含二个整数a,b(0using namespace std;int main(){ int a,b,c[100]; int i=0,j,k; while(cin>>a>>b&&(a!=0&&b!=0)) { for(j=0;j1) { for(k=0;k=10) cout<<c[k]<<" "; else cout<<"0"<<c 阅读全文
posted @ 2013-11-22 10:00 七年之后 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 描述给出一个长度为n的序列A1,A2,…,An,求最大的连续和。要求找到1≤i≤j ≤n,使得Ai+Ai+1+…+Aj尽量大。 输入第1行输入一个正整数n(n≤1000),此后输入n行,每行给出一个测试用例,包含正整数m和m个整数,以空格分隔各个数。输出输出n行。对于每一个测试用例,在一行输出最大的连续和。样例输入2 3 1 -1 3 3 1 2 3样例输出3 6 #includeint a[1001],s[1001];int main(){ int t,n,i,max,min; scanf("%d",&t); while(t--) { scanf("%d 阅读全文
posted @ 2013-11-22 09:56 七年之后 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 描述端午节到来,sed投资建设的仙林鼎山游乐园开业了。整个园区拥有许多游乐场,有多个入口和多个出口,游乐场之间铺设小路相连。端午节来游乐园的人实在太多,sed发布规定:游乐场之间的小路为单行道。但游乐场太多,工作人员常常将指示方向的标志牌放错方向,导致游客在游乐园又回到游览过的地方。请sed解决这个问题,按照现有的标志牌指示的方向,判断游客在一次行程中是否有可能回到游览过的地方。输入第一行是一个正整数:测试用例数目,最多为100。之后,每个测试用例包括:l 第1行给出两个整数n、e,2≤n≤50,1≤e≤1225,n表示游乐场的数目,游乐场分别用,e表示所有游乐场之间路径数。l e行,每1行给 阅读全文
posted @ 2013-11-22 09:55 七年之后 阅读(319) 评论(0) 推荐(0) 编辑
摘要: 描述知道斐波那契数吗?下面是它的一个定义:F1 = 1F2 = 2Fn+1 = Fn+Fn-1 ,这里n>1每个正整数x 可写为不同斐波那契数的总和,因而意味着存在数k 和数 b1, b2, ..., bk,使得x=b1*F1+...+bi*Fi+ ... +bk*Fk, 其中bk = 1,bi (1≤i 1,bi * bi-1 = 0。利用斐波那契数,我们可以将公里单位距离 x 转换为相应的英里单位距离 y,首先,以斐波那契系统表示b(x)写下x。其次,将b(x)中数字右移一位(最后一位删除),得到b(y)。第三,从b(y)中计算总数来算出 y。例如,数42以斐波那契系统表示为:(1, 阅读全文
posted @ 2013-11-22 09:54 七年之后 阅读(336) 评论(0) 推荐(0) 编辑