2013.3.6 SDUT 2013春季ACM集训_12级周赛2 A题 ZOJ 2965

思路:一开始想用链表做,但是想象了一下还是放弃,链表实现起来有些麻烦,然后想用数组,可是在写的过程中发现根本用不着,挺简单一题。用了一个标记变量和一个用来计数的变量就OK了。

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 int a[10000001];
 5 int main()
 6 {
 7     int n,i,j,p,l,count,t,flag;
 8     while(scanf("%d",&n)!=EOF)
 9     {
10         while(n--)
11         {
12             scanf("%d",&p);
13             count=0;flag=0;
14             for(i=1; ;i++)
15             {
16                 if(i%7==0)
17                   flag=1;
18                 else
19                 {
20                     t=i;j=0;
21                    while(t)
22                    {
23                      a[j++]=t%10;
24                      t=t/10;
25                    }
26                    for(l=0;l<j;l++)
27                    {
28                        if(a[l]==7)
29                            flag=1;
30                    }
31                 }
32                 if(flag==1)
33                 {
34                     count++;
35                     if(count==p)
36                        {printf("%d\n",i-p+1);break;}
37                     else
38                        flag=0;
39                 }
40                 else  {count=0;flag=0;}
41             }
42         }
43     }
44     return 0;
45 }

做完后和同学讨论,好像有个同学用的搜索。。。。呜呜呜,我不懂这么深奥的东东。。。

这是他的代码。。留待以后研究。。。

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 #define MAXN 1000
 5 
 6 int q[MAXN], top;
 7 
 8 int main(){
 9     int T, n, i, t, flag, cnt, j;
10     top = 0;
11     for(i=1; i<=MAXN; i++){
12         if(i % 7 == 0) q[top++] = i;
13         else{
14             flag = 0;
15             t = i;
16             while(t){
17                 if(t % 10 == 7) {flag = 1; break;}
18                 t /= 10;
19             }
20             if(flag) q[top++] = i;
21         }
22     }
23 
24     scanf("%d", &T);
25     while(T--){
26         scanf("%d", &n);
27         for(i=0; i<top; i++){
28             cnt = 1;
29             for(j=i+1; j<top; j++){
30                 if(cnt == n) break;
31                 if(q[j] == q[j-1]+1) cnt++;
32                 else{cnt = 1; break;}
33             }
34             if(cnt == n) break;
35         }
36         printf("%d\n", q[i]);
37 
38     }
39     return 0;
40 }
原文地址:https://www.cnblogs.com/mafangfang/p/2963670.html