programming challenge 1 基础入门....

来源:互联网 发布:黎明杀机无法连接网络 编辑:程序博客网 时间:2024/05/08 01:06

这些都是入门基础题,做完之后发现自己基础不牢啊...什么浮点型计算不清楚,各种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;}


 

原创粉丝点击