-
有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位?
#include<stdio.h> int main() { int i,k,m,n,num[50],*p; printf("input number of person: n="); scanf("%d',&n); p=num; for(i=0;i<n;i++) *(p+i)=i+1; i=0; k=0; m=0; while(m<n-1) //m是指出局的人数,因为有n个人,最后剩下一个人,所以最多出局(n-1)个人,构成循环 { if(*(p+i)!=0) //判断这个号(原来的序号)是否出局 k++; // 这个号没有出局,就报数,计数器加1 if(k == 3) //报3的出局 { *(p+i)=0; //将出局的这个人标记 k=0; //使计数器置零,以便后面的人报数 m++; //出局的人计数器加1 } i++; //将指针后移,虽然i不是指针,但p+i就是指针了,所以i就是为指针服务的 if(i==n) //如果指针移到了尾部,则返回到头部 i=0; } // 以上的循环是主要焦点,后面的就是找到最后那个人,这个好理解 while(*p==0) //用这个可以只判断所找号的前面的号(包括所找号),不用判断后面的。 p++; printf("The last one is NO.%d\n",*p); return 0; }
-
设计一个洗牌发牌的程序。
#include <stdio.h> int main() { int n,i; int flag[52]={0}; srand((unsigned int)time(NULL)); for(i=0;i<52;i++) { n=rand()%52; while(flag[n] ==1) { n=rand()%52; } flag[n] = 1; if(n >=0&& n<13) { printf("红心%d", n+1); } else if(n>=13&&n<26) { printf("黑桃%d", n-12); } else if(n>=26&&n<39) { printf("梅花%d", n-12); else { printf("方片%d", n-38); } if((i+1)%13 ==0 ) printf("\n'); } return 0; }
c经典例题2
最新推荐文章于 2022-12-09 10:46:30 发布