首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言有关问题,关于循环报数

2013-01-08 
C语言问题,关于循环报数#includestdio.hmain(){int circle[17]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

C语言问题,关于循环报数
#include<stdio.h>
main(){
   int circle[17]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
   int call;
   int number;
   int i;
   number=17;
   call=1;
   while(number>0)
   {
      for(i=1;i<=17;i++){
           if(call%3!=0&&circle[i]!=-1){
              call++;
           }else if(call%3=0){
               circle[i]=-1;
               number--;
               call++;
           }
      }
   }
   for(i=1;i<=17;i++){
      while(circle[i]!=-1){
        printf("the num is %d",i);
      }
   }
   system("pause");
   }
编译失败,显示错误提示是需要逻辑0或非0在main函数中,求解释
[解决办法]


int circle[17]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
   int call;
   int number;
   int i=0;
   number=16;//出队次数
   call=1;//出队循环变量
   while(number>0)
   {
   if((circle[i]!=-1))//当前元素未出队
   {
   if((call%3) == 0)//当前到循环点
   {
   circle[i]=-1;  
   call++;
   number--;
   }
   else
   {
   call++;
   }
   }  
   
   i++;
   if(i>=17)
   i%=17;
    
   }

   for(i=0;i<17;i++)
   {
      if(circle[i]!=-1)
  {
        printf("the num is %d\n",i);
      }
   }
 
   system("pause");


更改了你的求解逻辑
[解决办法]
引用:
我照着改了···还是有问题····
原题是17,编号0到16个人循环报数,从1开始,报到3的倍数的人离开知道剩下最后一个人····问这个人原来的编号是多少···答案是10
我改成这样的代码:
#include<stdio.h>
main(){
   int circle[17]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}……

你代码有点问题, 帮你改了一下:
#include<stdio.h>
int main()
{
  int circle[17]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
  int call;
  int number;
  int i;
  number=16;
  call=1;
  while(number>0)
  {
    for(i=0;i<=16;i++){
      if(circle[i] != -1) {


        if(call%3 == 0) {
          circle[i] = -1;
          number--;
        }
        call ++;
      }
    }
  }
  for(i=0;i<=16;i++){
    if(circle[i]!=-1){
      printf("the num is %d\n",i);
    }
  }
  //system("pause");
  return 0;
}


[解决办法]
//假设有n个人团团围做,从第1个人开始数数,数到第m个人时候,第m个人出列,
//然后继续从1开始数数,数到第m个人退出
#include <stdio.h>
#include <conio.h>
int i,k,t;
int n,m;
static char f[1001];//0该座位未出圈,1该座位已出圈
void main() {
    while (1) {
        printf("Input n m(1000>=n>=m>=1):");
        fflush(stdout);
        rewind(stdin);
        if (2==scanf("%d%d",&n,&m)) {
            if (1000>=n && n>=m && m>=1) break;
        }
    }
    t=0;//已出圈总人数
    i=1;//座位编号
    k=1;//当前要数的数
    while (1) {
        if (0==f[i]) {
            if (m==k) {
                t++;
                f[i]=1;
                printf("%3d ",i);
                if (0==t%10) printf("\n");
                if (t>=n) break;
            }
            k++;if (k>m) k=1;
        }
        i++;if (i>n) i=1;
    }
    cprintf("Press any key ...");
    getch();
}

热点排行