数组元素移动
【问题描述】调整输入数组A[0..n],将其分为两部分,左边所有元素为奇数,右边所有元素为偶数
【输入形式】a0,b1,b2,a1,a2,b3,a3,a4 【输出形式】a0,a1,a2,a3,a4,b1,b2,b3 【样例输入】1,2,33,8,5 【样例输出】1,33,5,2,8代码:
#includeint main(){ int a[100]; int n=100,i,j,count=1,m; for(i=0;i
排序问题
【问题描述】
输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
【输入形式】一个升序排序的数组以空格隔开,以及一个目标数字,换行输入
【输出形式】如果存在数组中两个数字和为目标数字,则输出数字对;
如果存在多个满足条件的数字对,输入一对即可;
不存在则不输出;
【样例输入】1 2 4 7 11 15
15
【样例输出】
4 11
【样例说明】4+11=15
【评分标准】时间复杂度必须为 O(n),否则酌情给分。
#includeint main(){ int a[100],b[100],c[100]; int i,count=0,j=0,k=0; char s; for(i=0;i<100;i++) { scanf("%d",&a[i]); char c=getchar(); if(c=='\n') break; scanf("%c",&s); count++; } for(i=0;i<=count;i++) { if(a[i]%2==1||a[i]%2==-1) { b[j]=a[i]; j++; } if(a[i]%2==0) { c[k]=a[i]; k++; } } printf("%d",b[0]); for(i=0;i
猴子选大王问题
【问题描述】
N只猴子选大王,选举方法如下:所有猴子按1,2,3,… ,N编号围坐一圈,从第1个猴子开始报数,报到M号退出圈外,如此循环报数,直到圈内只剩下一个猴子,即为大王。编程输出大王的原始序号。N和M的值由键盘输入。如果你想成为剩下的那一个,在N一定的情况下,你应该站在什么位置上?编程实现位置的求解。
【输入形式】输入两个数字N和M,N为猴子的个数,M为报到后退出圈外的数字。
【输出形式】显示最后剩下的猴子的原始序号。
【样例输入】
5 3
【样例输出】4
【样例说明】共5个猴子围成一圈,报到3号退出圈外,最后留下的猴子的原始编号为4
【评分标准】当输入的M,N不合法时应当给出错误提示“请输入合法的M,N值!”。
#includeint main(){ int n,m; int last = 0; scanf("%d %d",&m,&n); if(n<1 || m<1 ) { printf("请输入合法的M,N值!\n"); }else{ for (int i=2;i<=m;i++) { last = (last+n)%i; } printf("%d\n",last+1); } return 0;}