为什么我写的程序acm中显示是wrong answer?? 急需高人指点

2024-12-05 04:41:02
推荐回答(2个)
回答1:

你用的是c语言,最好不要在半路定义变量,那是c++的写法

第一题你的测试数据都没过怎么能交呢?
/*
if(a[i]<0)
{
d=-a[i];
}
else d=a[j]; //你的这里错了,应该是a[i]
*/

#include
#include
int main()
{
int n,i,j;
int a[100],d,b,c;
while(scanf("%d",&n)!=EOF&&n!=0){
for(i=0;i scanf("%d",&a[i]);

for(i=0;i for(j=i+1;j {
d=abs(a[i]);
b=abs(a[j]);
if(d {
c=a[i];
a[i]=a[j];
a[j]=c;
}
}
}

printf("%d",a[0]);
for(i=1;i printf(" %d",a[i]);
printf("\n");
}
return 0;
}

第二题你没更新a[i]的值:

#include
int main()
{
int n,i,j;
int a[100],mon;
int money[6]={100,50,10,5,2,1};
while(scanf("%d",&n),n)
{
mon=0;
for(i=0;i scanf("%d",&a[i]);

for(i=0;i for(j=0;j<6;j++)
{
mon+=a[i]/money[j];
a[i]%=money[j];
}
printf("%d\n",mon);
}
return 0;
}

回答2:

第一题
else d=a[j]; 你的这里错了,应该是a[i]
还有你为什么不在输入时做下处理,把他们改成自己的绝对值,就不用在排序中那么麻烦了。

第二题 你似乎没考虑5块钱,还有你试试1 15。。。而且每次要更a[i]的值,这样才是剩下的零钱数。

下面是我的程序
第一题
#include
using namespace std;
int main()
{
int n,i,m,j,a[101],b[101];
while (scanf("%d",&n))
{
if (n==0) break;
for (i=1;i<=n;i++)
{
scanf("%d",&a[i]);
b[i]=abs(a[i]);
}
for (i=1;i {
m=i;
for (j=i+1;j<=n;j++)
if (b[j]>b[m])
m=j;
swap(a[i],a[m]);
swap(b[i],b[m]);
}
for (i=1;i<=n;i++)
{
if (i!=1) printf(" ");
printf("%d",a[i]);
}
printf("\n");
}
return 0;
}
第二题
#include
using namespace std;
int gongzi(int n)
{
int a,b,c,d,e,f;
a=n/100;
n%=100;
b=n/50;
n%=50;
c=n/10;
n%=10;
d=n/5;
n%=5;
e=n/2;
f=n%2;
return a+b+c+d+e+f;
}
int main()
{
int n,a,s;
while (scanf("%d",&n))
{
if (n==0) break;
s=0;
while (n--)
{
scanf("%d",&a);
s+=gongzi(a);
}
printf("%d\n",s);
}
return 0;
}