这些都是入门基础题,做完之后发现自己基础不牢啊...什么浮点型计算不清楚,各种wa问题,各种BUG快速难以找到,还有自己的一些粗心的存在。蛋疼。
第一题:The 3n + 1 problem
这个问题描述非常简单,但数据量有点大,开始打表始终过不了,后来还是一边保存数据,一边输出答案AC了;
#include <cstdio>
#include <cstring>
#include <algorithm>
int f[5000100];
int a[1000100];
int n,m;
int ff(int x)
{
int k=x,t=1;
while (k!=1)
{
if (k % 2==0)
k/=2;
else
k=3*k+1;
t++;
}
return t;
}
int main()
{
memset(f,0,sizeof(f));
while (~scanf("%d%d",&n,&m))
{
int max=0;
int n1=n,m1=m;
if (n>m)
{
int t=n;
n=m;
m=t;
}
for (int i=n;i<=m;i++)
{
if (f[i]==0)
f[i]=ff(i);
if (f[i]>max)
max=f[i];
}
printf("%d %d %d\n",n1,m1,max);
}
return 0;
}
第二题:Minesweeper
扫雷问题,非常简单的模拟吧...一遍AC...
#include <cstdio>
#include <cstring>
int map[110][110];
void ff(int x,int y)
{
if ( (x-1>0) && (y-1>0) && map[x-1][y-1]!=-1)
map[x-1][y-1]++;
if ( (x-1>0) && (y>0) && map[x-1][y]!=-1)
map[x-1][y]++;
if ( (x-1>0) && (y+1>0) && map[x-1][y+1]!=-1)
map[x-1][y+1]++;
if ( (x>0) && (y-1>0) && map[x][y-1]!=-1)
map[x][y-1]++;
if ( (x>0) && (y+1>0) && map[x][y+1]!=-1)
map[x][y+1]++;
if ( (x+1>0) && (y-1>0) && map[x+1][y-1]!=-1)
map[x+1][y-1]++;
if ( (x+1>0) && (y>0) && map[x+1][y]!=-1)
map[x+1][y]++;
if ( (x+1>0) && (y+1>0) && map[x+1][y+1]!=-1)
map[x+1][y+1]++;
}
int main()
{
int n,m,t=1;
scanf("%d%d",&n,&m);
while ((n+m))
{
memset(map,0,sizeof(map));
for (int i=1;i<=n;i++)
{
getchar();
for (int j=1;j<=m;j++)
{
char c;
scanf("%c",&c);
if (c=='*')
map[i][j]=-1;
}
}
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if (map[i][j]==-1)
ff(i,j);
printf("Field #%d:\n",t++);
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
if (map[i][j]==-1)
printf("*");
else
printf("%d",map[i][j]);
printf("\n");
}
scanf("%d%d",&n,&m);
if (n+m) printf("\n");
}
return 0;
}
第三题:The Trip
旅行,这个问题描述没搞太清楚,题意都没理解透就开始写代码,结果自然WA了,后来网上看题解,才发现这是最小值中找最大...唉...哦,其中的浮点型计算也很麻烦,试过很多种方法,蛋疼,最后还是化成整数计算...
#include <cstdio>
int main()
{
double a[1010];
int n;
double f;
while (~scanf("%d",&n) && n)
{
f=0;
for (int i=1;i<=n;i++)
{
scanf("%lf",&a[i]);
f+=a[i];
}
f=f/n;
double ff=0,fff=0;
for (int i=1;i<=n;i++)
if (a[i]>f)
ff+=(int)((a[i]-f)*100)/100.0;
else
fff+=(int)((f-a[i])*100)/100.0;
printf("$%.2lf\n",ff<fff?fff:ff);
}
return 0;
}
第四题:LCD Display
简单的显示数字,耐心一点吧...能AC的...但是我不是一个很沉得住气的人...
#include <cstdio>
#include <cstring>
char z[][40]={ " - - - - - - - - ",
"| | | | || || | || || |",
" - - - - - - - ",
"| | || | | || | || | |",
" - - - - - - - "};
int main()
{
int s,l;
char m[10];
while(~scanf("%d",&s) && s)
{
getchar();
scanf("%s",&m);
l=strlen(m);
for (int i=0;i<2*s+3;i++)
{
for (int j=0;j<l;j++)
{
int num=m[j]-'0';
if (i==0 || i==s+1 || i==s*2+2)
{
int t;
if (i==0) t=0;
if (i==s+1) t=2;
if (i==s*2+2) t=4;
printf("%c",z[t][num*3]);
for (int k=0;k<s;k++)
printf("%c",z[t][num*3+1]);
printf("%c",z[t][num*3+2]);
}
else if (i>0 && i<s+1)
{
printf("%c",z[1][num*3]);
for (int k=0;k<s;k++)
printf("%c",z[1][num*3+1]);
printf("%c",z[1][num*3+2]);
}
else
{
printf("%c",z[3][num*3]);
for (int k=0;k<s;k++)
printf("%c",z[3][num*3+1]);
printf("%c",z[3][num*3+2]);
}
if (j!=l-1)
printf(" ");
}
printf("\n");
}
printf("\n");
}
return 0;
}