c经典例题2

  1. 有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;
       }
    
  2. 设计一个洗牌发牌的程序。

      #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;
      }      
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值