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