首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一道编程题,求。新手发帖,请多关照

2012-09-22 
一道编程题,求高手指点。新手发帖,请多关照。题目是这样的:最少钱币数:【问题描述】这是一个古老而又经典的问

一道编程题,求高手指点。新手发帖,请多关照。
题目是这样的:
最少钱币数:
【问题描述】
这是一个古老而又经典的问题。用给定的几种钱币凑成某个钱数,一般而言有多种方式。例如:给定了6种钱币面值为2、5、10、20、50、100,用来凑 15元,可以用5个2元、1个5元,或者3个5元,或者1个5元、1个10元,等等。显然,最少需要2个钱币才能凑成15元。
你的任务就是,给定若干个互不相同的钱币面值,编程计算,最少需要多少个钱币才能凑成某个给出的钱数。

【要求】
【数据输入】输入可以有多个测试用例。每个测试用例的第一行是待凑的钱数值M(1 <= M <= 2000,整数),接着的一行中,第一个整数K(1 <= K <= 10)表示币种个数,随后是K个互不相同的钱币面值Ki(1 <= Ki <= 1000)。输入M=0时结束。

【数据输出】每个测试用例输出一行,即凑成钱数值M最少需要的钱币个数。如果凑钱失败,输出“Impossible”。你可以假设,每种待凑钱币的数量是无限多的。

【样例输入】
15
6 2 5 10 20 50 100
1
1 2
0

【样例输出】
2
Impossible

我的程序是这样的:

[code=C/C++][/code]
#include "stdio.h"
void order(int *a,int m)
{
int i,j,t;
for(i=0;i<m-1;i++)
for(j=i;j<m;j++)
if(a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
int main()
{
int i,k,count=0;
int money,type_num;
int type[10];
int result[300];
scanf("%d",&money);
while(money!=0)
{

scanf("%d",&type_num);// 输入钱的种类数
for(i=0;i<type_num;i++)// 输入钱的种类
scanf("%d",&type[i]);
order(type,type_num);//种类排序
k=0;
for(i=0;i<type_num;i++)//计算最少用多少张
while(money/type[i]!=0)
{
money-=type[i];
k++;
}
result[count]=k;//记录数据
count++;
scanf("%d",&money);// 进入下次循环,录入被分的钱
}
for(i=0;i<count;i++)// 输出结果
{switch(result[i])
{
case 0:printf("Impossible");break;
default:printf("%d",k);break;
}
printf("\n");
}
}


我按题目给的数据测试,输出的结果却是:

0
Impossible



不明白那里错了,求指点。

[解决办法]
如下:

C/C++ code
        default :            //printf("%d",k);            printf("%d",result[i]);            break; 

热点排行