题目大意:
题目原文:http://uva.onlinejudge.org/external/1/151.pdf
大概是说有N个地区,编号分别是1~N,要按一个算法规则依次断电,这个算法是:规定一个数字m,第一个断电的是1地区,然后往后数m个没断电的城市,第二个断电的应该是1+m 地区,如果数的过程中到了第N个城市,则从头开始继续往下数。如:N=17,m=5的时候,断电的顺序依次是:1,6,11,16,5...要注意到16的时候,往下数是17,2,3,4,5(因为1已经断电了,不数。)那么题目要求输入一个N,求出最后一个断电的地区是13的最小的m值输出。
使用穷举法即可完成了。输入一个N,然后定义一个长度是N+1的数组x,让m值从1开始循环。先把数组x全部赋值为0,然后从x[1]开始赋值为1表示该地区已经断电,再往后数m个不等于1的地区,赋值为1;再继续数m个地区。。。直到数了N个地区之后,说明全部都断电了,那么判断最后一个断电的地区是不是13。如果是,则找到了m,如果不是的话,就m++再重复上面的步骤。
附上代码:
View Code
1 #include<stdio.h> 2 int main() 3 { 4 int n,m,i,j,k; 5 while(1) 6 { 7 scanf("%d",&n); 8 if(n==0) break;//退出条件 9 int x[n+1]; 10 for(m=1;;m++) 11 { 12 for(i=1;i<=n;i++) x[i]=0;//初始化 13 i=j=1; 14 x[1]=1; 15 while(j<n) 16 { 17 for(k=1;k<=m;i++)//k计算当前往后数了几次 18 { 19 if(x[i]==0) k++;//如果是0的话要计数一次 20 else if(i>n) i=1;//如果当前的i值超过了n,要从头开始计算。 21 } 22 x[i-1]=1; 23 j++;//j用来计数当前有多少地区断电,如果j==n说明全部断电完成 24 } 25 26 if(i-1==13) 27 { 28 printf("%d\n",m); 29 break; 30 } 31 32 } 33 } 34 return 0; 35 }