首页 > 代码库 > 题目不难,还是自己懂得代码太少,纯粹凭思维解题。。努力学吧。。
题目不难,还是自己懂得代码太少,纯粹凭思维解题。。努力学吧。。
Given your cards received at the beginning, write a program to tell the maximal number of rounds that you may at least win during the whole game.
Input
The input is terminated by a line with two zeros.
Output
Sample Input
Case 2: 4
下面是过的代码
#include<stdio.h>
main()
{
int i,m,n,g,k,t,sum,num;
int x[1060];
int z[1060];
num=1;
while(scanf("%d %d",&m,&n)!=EOF)
{if(m==0&&n==0) break;sum=0;
for(i=1;i<=m*n;i++)
{z[i]=i;}
for(i=1;i<=n;i++)
scanf("%d",&x[i]);
m=m*n;
for(i=1;i<=n;i++)
for(g=1;g<=m;g++)
{
if(x[i]==z[g])
z[g]=1080;
}
for(i=1;i<n;i++)
for(g=i+1;g<=n;g++)
{if(x[i]<x[g])
{t=x[i];x[i]=x[g];x[g]=t;}
}
for(g=m;g>0;g--)
for(i=1;i<=n;i++)
{
if(z[g]>x[i]&&z[g]!=1080)
{x[i]=2000;
break;}
}
for(i=1;i<=n;i++)
{
if(x[i]!=2000)
sum++;
}
printf("Case %d: %d\n",num,sum);
num++;
}
}
感觉自己写的很幼稚,完全没有算法的美。完全凭思维写,就是按照人脑的步骤复制给程序,非常低级的感觉。。。。。
前面错的代码也附上:
原本是想倒序排列一下全部的在比较,一样的就+1不一样就给0
#include<stdio.h>#include<string.h>main(){int i,m,n,g,k,t,sum,num;int x[1060];int z[1060];num=1;while(scanf("%d %d",&m,&n)!=EOF){if(m==0&&n==0) break;memset(z,0,sizeof(z));sum=0;for(i=1;i<=n;i++)scanf("%d",&x[i]);for(i=1;i<n;i++)for(g=i+1;g<=n;g++){if(x[i]<x[g]){t=x[i];x[i]=x[g];x[g]=t;}}m=m*n;for(i=1;i<=n;i++){if(z[i]==0&&x[i]==m){ sum++; z[m]=1;}else if(z[i]==0&&x[i]<m){ t=x[i];z[t]=1;z[m]=1;m--;}m--;}printf("Case %d: %d\n",num,sum);num++;}}
题目不难,还是自己懂得代码太少,纯粹凭思维解题。。努力学吧。。