现在是00:35,这是第一次培训的练习题,严格意义上说是这样。
现在已经都AC了:
错误基本没有,只是出现两次,一次是输出格式少了个换行符,另一个就是运行超时。
感觉还是蛮不错。
第一题:一个水题,没多少意义,只是需要把计算结果转换成拼音 - -!!!(为毛是拼音?这也太掉价了!用英文不显得更高大上?)我就不吐槽了,下面附上代码:
<pre name="code" class="objc">#include<stdio.h>
int main()
{
char ch;
unsigned long long int sum=0;
while(scanf("%c",&ch)!=EOF)
{
if(ch>='0'&&ch<='9')
sum+=ch-'0';
if(ch==10)
{
int a[100000];
int t;
for(t=0;;t++)
{
a[t]=sum%10;
sum=sum/10;
if(sum==0)
break;
}
int j;
for(j=t;j>=0;j--)
{
if(j!=t)
printf(" ");
if(a[j]==0)
printf("ling");
if(a[j]==1)
printf("yi");
if(a[j]==2)
printf("er");
if(a[j]==3)
printf("san");
if(a[j]==4)
printf("si");
if(a[j]==5)
printf("wu");
if(a[j]==6)
printf("liu");
if(a[j]==7)
printf("qi");
if(a[j]==8)
printf("ba");
if(a[j]==9)
printf("jiu");
}
printf("\n");
}
}
return 0;
}
第二题,就是二分法处理,提高数据处理速度,错了一次,是忘记了加换行符。
<pre name="code" class="objc">#include<stdio.h>
int main()
{
int i,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
int j,k,m;
scanf("%d",&m);
int a[m];
for(j=0;j<m;j++)
{
scanf("%d",&a[j]);
}
int mid=m/2,sum,num,star=0,end=0;
for(j=0;j<=mid;j++)
{
sum=0;
for(k=j;k<=mid;k++)
{
sum=sum+a[k];
if(k==0)
num=sum;
else if(num<sum)
{
num=sum;
star=j+1;
end=k+1;
}
}
}
for(j=0;j<=m/2;j++)
{
int s,sum=0;
for(s=j;s<=m/2;s++)
{
sum+=a[s];
}
for(k=m/2+1;k<m;k++)
{
sum=sum+a[k];
if(num<sum)
{
num=sum;
star=j+1;
end=k+1;
}
}
}
for(j=mid+1;j<m;j++)
{
sum=0;
for(k=j;k<m;k++)
{
sum=sum+a[k];
if(num<sum)
{
num=sum;
star=j+1;
end=k+1;
}
}
}
if(i!=1)
printf("\n");
if(m==1)
printf("Case %d:\n%d 1 1\n",i,a[0]);
else
printf("Case %d:\n%d %d %d\n",i,num,star,end);
}
return 0;
}
第三题,是读取字符转换成数字,半小时就搞定啦,水题一个 o(∩_∩)o:
<pre name="code" class="objc">#include<stdio.h>
int main()
{
int a[100],t,k,i=0;
while(1)
{
a[i]=getchar();
if(a[i]=='z')
{
a[i]=0;
getchar();getchar();getchar();getchar();
}
else if(a[i]=='o')
{
a[i]=1;
getchar();getchar();getchar();
}
else if(a[i]=='t')
{
a[i]=getchar();
if(a[i]=='w')
{
a[i]=2;
getchar();
getchar();
}
else if(a[i]=='h')
{
a[i]=3;
getchar();
getchar();
getchar();
getchar();
}
}
else if(a[i]=='f')
{
a[i]=getchar();
if(a[i]=='o')
a[i]=4;
if(a[i]=='i')
a[i]=5;
getchar();
getchar();
getchar();
}
else if(a[i]=='s')
{
a[i]=getchar();
if(a[i]=='i')
{
a[i]=6;
getchar();
getchar();
}
if(a[i]=='e')
{
a[i]=7;
getchar();
getchar();
getchar();
getchar();
}
}
else if(a[i]=='e')
{
a[i]=8;
getchar();
getchar();
getchar();
getchar();
getchar();
}
else if(a[i]=='n')
{
a[i]=9;
getchar();
getchar();
getchar();
getchar();
}
else if(a[i]=='+')
{
t=i;
getchar();
}
else if(a[i]=='=')
{
getchar();
int j,sum1=0,sum2=0;
for(j=0;j<t;j++)
{
sum1=sum1*10+a[j];
}
for(j=t+1;j<i;j++)
{
sum2=sum2*10+a[j];
}
if(sum1==0&&sum2==0)
return 0;
else
printf("%d\n",sum1+sum2);
i=-1;
}
i++;
}
}
第四题,好扯淡的题
上来就用了错误的方法,测试结果当然对了;我求了所有的素数,超时了,本来要问楷哥的,@K,错误的代码如下:(先吐槽一下,超时60%,是不是学长出的后台数据很坑啊?)#include<stdio.h>
#include<math.h>
int is_primer(int num)
{
int k=0,i;
if(num==1) return 0;
else if(num==2) return 1;
else if(num==3) return 1;
else
{
for(i=2;i<=sqrt(num);i++)
{
if(num%i==0)
k++;
}
if(k==0) return 1;
else return 0;
}
}
int main()
{
int m,n;
static int a[500005];
while(scanf("%d%d",&m,&n)!=EOF)
{
int i,k,j;
for(i=2,j=0;j<n;i++)
{
k=is_primer(i);
if(k==1)
a[++j]=i;
}
int t;
for(t=m,i=0;t<n;t++)
{
printf("%d",a[t]);
i++;
if(i%10==0)
printf("\n");
else
printf(" ");
}
printf("%d\n\n",a[n]);
}
return 0;
}
用筛选法AC了,其实不难,筛选法写了30分钟:<pre name="code" class="objc">#include<stdio.h>
#include<math.h>
int a[8000000]={0},b[500005];
int main()
{
int m,n; //质数是0,其他是1
a[0]=1;
a[1]=1;
int i,j=0,temp;
for(i=2;j<=500000;i++)
{
if(a[i]==0)
{
b[++j]=i;
temp=2*i;
}
while(temp<=8000000)
{
a[temp]=1;
temp+=i;
}
}
while(scanf("%d%d",&m,&n)!=EOF)
{
for(i=0;m<n;m++)
{
printf("%d",b[m]);
i++;
if(i%10==0)
printf("\n");
else
printf(" ");
}
printf("%d\n\n",b[n]);
}
return 0;
}
第五题,水题一个,不过这是我第一次用二维数组,有点不熟悉,30分钟多一点才搞完这个水题。
<pre name="code" class="objc">#include<stdio.h>
int main()
{
int m,n;
while(scanf("%d%d",&m,&n)!=EOF)
{
int a[m][n],b[m][n];
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
b[i][j]=0; //初始化b[m][n],成立为0,不成立为1
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
if(i!=0&&a[i][j]<=a[i-1][j])
b[i][j]=1;
if(i!=m-1&&a[i][j]<=a[i+1][j])
b[i][j]=1;
if(j!=0&&a[i][j]<=a[i][j-1])
b[i][j]=1;
if(j!=n-1&&a[i][j]<=a[i][j+1])
b[i][j]=1;
}
int out=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
if(b[i][j]==0)
{
printf("%d %d %d\n",a[i][j],i+1,j+1);
out=1;
}
}
if(out==0)
printf("None %d %d\n",m,n);
printf("\n");
}
return 0;
}
晚上有点困,看不清屏幕的i和1,m和n;还老是写错,终于搞完了,睡觉觉去了。
9732

被折叠的 条评论
为什么被折叠?



