您的位置:首页 > 其它

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

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

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int a[10000001];
int main()
{
int n,i,j,p,l,count,t,flag;
while(scanf("%d",&n)!=EOF)
{
while(n--)
{
scanf("%d",&p);
count=0;flag=0;
for(i=1; ;i++)
{
if(i%7==0)
flag=1;
else
{
t=i;j=0;
while(t)
{
a[j++]=t%10;
t=t/10;
}
for(l=0;l<j;l++)
{
if(a[l]==7)
flag=1;
}
}
if(flag==1)
{
count++;
if(count==p)
{printf("%d\n",i-p+1);break;}
else
flag=0;
}
else  {count=0;flag=0;}
}
}
}
return 0;
}


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

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

#include <stdio.h>
#include <string.h>

#define MAXN 1000

int q[MAXN], top;

int main(){
int T, n, i, t, flag, cnt, j;
top = 0;
for(i=1; i<=MAXN; i++){
if(i % 7 == 0) q[top++] = i;
else{
flag = 0;
t = i;
while(t){
if(t % 10 == 7) {flag = 1; break;}
t /= 10;
}
if(flag) q[top++] = i;
}
}

scanf("%d", &T);
while(T--){
scanf("%d", &n);
for(i=0; i<top; i++){
cnt = 1;
for(j=i+1; j<top; j++){
if(cnt == n) break;
if(q[j] == q[j-1]+1) cnt++;
else{cnt = 1; break;}
}
if(cnt == n) break;
}
printf("%d\n", q[i]);

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: