六十八、有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。
#include<stdio.h> void move_array(int a[],int n,int m) { int i; int b[100]; if(m>n) { printf("input error(%d must less than %d). ",m,n); } else { for(i=0;i<(n-m);i++) b[i]=a[i]; for(i=0;i<m;i++) a[i]=a[n-m+i]; for(i=m;i<n;i++) a[i]=b[i-m]; } } void print_array(int a[],int n) { int i; for(i=0;i<n;i++) printf("-%2d-",a[i]); printf(" "); } int main() { int a[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; int m; void move_array(int a[],int,int); void print_array(int a[],int n); printf("input a number for moving. "); scanf("%d",&m); print_array(a,20); move_array(a,20,m); print_array(a,20); getch(); return 0; }
六十九、有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出 圈子,问最后留下的是原来第几号的那位。
程序分析:用一个数组存放初始n个人,每个数组元素值设为(i+1),从1~3报数,若报到3,则将对应数组元素值设为0,同时设置报到3的计数器,设0同时计数器加1.当计数器数值为(n-1)时候,报数结束,找出数组元素值不为0的那一项。
#include<stdio.h> #define mynumber 17 int pick_num(int a[],int n) { int i=0; //数组下标 int j=1; //报数游标 int k=0; //清出计数器 while((n-k)!=1) { if(a[i]==0) //当元素值为0时不报数 { i++; } else //当元素值不为0时才可以报数 { if(j%3==0) { k++; //当报数后为3才清出 a[i]=0; //报数为0将数组元素值设为0 } i++; //指向下一个数组元素 j++; //报下一个数 } if(i==n) i=0; //当到末尾时候,重新指向数组首元素 } i=0; while(a[i]==0) i++; //找出非0元素 printf("最终数是第%d个数字。 ",i+1); return i+1; } int main() { int a[mynumber]; int i; for(i=0;i<mynumber;i++) a[i]=i+1; pick_num(a,mynumber); getch(); return 0; }
七十、写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
#include<stdio.h> int str_len(char *p) { int i=0; while(*(p+i)!='