2 crazydogtype CrazyDogType 于 2014.05.27 23:33 提问

这个问题该怎么玩?求大神相助!

书写一个任意正整数拆分的功能。拆分为:100,50,30,10,9,8,7,6,5,4,3,2,1
  拆分规则 从大到小,如276 拆分为 100,100,50,10,10,6
求解决方法和代码啊!

3个回答

lym753024200
lym753024200   2014.05.28 08:30

把你的拆分因子放倒一个数组,然后用贪心算法对将要拆分的数字从最大的因子开始试探,如果可以减出来,就减出来继续拆分余下的;不过不能拆分,就改用次大的因子;如此循环就行了。问题解决记得选为正确答案哦

jy02684358
jy02684358   2014.05.28 11:08

你的拆分规则不明确奥,只需要拆分成从大到小的整数?如果是这样的话除10取余不就行了吗?
int num = 279;
int count = 0;
do{
printf("%d",(num%10)*10^count);
count++;
}while((num=num/10)>0)

caokewen123
caokewen123   2014.05.28 16:03

int max(int Data,int Bits,int *Arrays,int *ArraysCom)
{
if (Data > 0)
{
ArraysCom[Bits] = Data / Arrays[Bits];
Data = Data%Arrays[Bits];
if (Bits == 5)
ArraysCom[Bits] = Data;
return Data;
}
return 0;

}
void printfNumber(int sort, int number)
{
if (number <= 0) return;
for (int i = 0; i < number; i++)
{
printf("%d ", sort);
}
}
int main()
{
int CommonData[5] = { 100, 50, 30, 10,1};
int Data, Common[5] = {0};
while (!scanf_s("%d", &Data))
{
//fflush(stdin);
printf("\n输入错误,请重新输入:\n");
}
for (int i = 0; i < 5; i++)
{
Data = max(Data, i, CommonData, Common);
}
for (int i = 0; i {
switch (i)
{
case 0:
printfNumber(100, Common[i]);
break;
case 1:
printfNumber(50, Common[i]);
break;
case 2:
printfNumber(30, Common[i]);
break;
case 3:
printfNumber(10, Common[i]);
default:
break;
}
}
if (Common[4]>0)
printf("%d", Common[4]);
return 0;
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!