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++;
}
}