151 - Power Crisis

题目大意:

题目原文: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 }

 

posted on 2013-02-16 23:17  T^T  阅读(294)  评论(0编辑  收藏  举报

导航