递归方面的问题

fdg个sggggg 2008-10-12 04:39:46

计算用1角、2角、5角硬币组成1元钱时所有的方法。
帮忙改下吧,不知道哪不对啊 ,小弟这里先谢过了。

#include <iostream>
#include <stdlib.h>

using namespace std;
void fac(int i);
int main(int argc, char *argv[])
{

fac(0);
system("PAUSE");
return 0;
}
void fac(int i)
{
while(i<=2) //i代表5角钱个数
{int j=0,k=0,num=0,p; //j代表2角钱个数
p=10-i*5; //k代表1角钱个数
if(p==0)
{
num++;
cout<<"方法"<<num<<"\t"<<"1角硬币个数"<<"\t"<<"2角硬币个数"<<"\t"<<"5角硬币个数"<<endl;
cout<<" "<<k<<"\t"<<" "<<j<<"\t"<<" "<<i<<endl;

}
else
{
num++;

p=i*5+(j++)*2;
while(p<=10)
{
cout<<"方法"<<num<<"\t"<<"1角硬币个数"<<"\t"<<"2角硬币个数"<<"\t"<<"5角硬币个数"<<endl;
cout<<" "<<10-i*5+(j++)*2<<"\t"<<j<<"\t"<<i<<endl;
}
}
return fac(i++);
}
}
...全文
157 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
phz1985 2008-10-12
  • 打赏
  • 举报
回复

#include <stdio.h>

int main()
{
int i, j, k;
for(i = 0; i <= 10; i++)
{
for(j = 0; j <= 5; j++)
{
for(k = 0; k <= 2; k++)
{
int sum = i*1 + j*2 + k*5;
if (sum == 10)
printf("1: %d, 2: %d, 5: %d\n", i, j, k);
}
}
}
return 0;
}
fdg个sggggg 2008-10-12
  • 打赏
  • 举报
回复
当然使跟你说话了,不好意思啊,
帅得不敢出门 2008-10-12
  • 打赏
  • 举报
回复
递归关键是思想
roselake 2008-10-12
  • 打赏
  • 举报
回复
学习了o(∩_∩)o...
jia_xiaoxin 2008-10-12
  • 打赏
  • 举报
回复
你最主要的问题出在++i写成i++;++j写成j++;
还有返回值应该为空

#include <iostream> 
#include <stdlib.h>

using namespace std;
void fac(int i);
int main(int argc, char *argv[])
{

fac(0);
system("PAUSE");
return 0;
}

void fac(int i)
{
while(i <=2) //i代表5角钱个数
{
int j=0,k=0,num=0,p; //j代表2角钱个数
p = 10-i*5; //k代表1角钱个数
if(p==0)
{
num++;
cout <<"方法" <<num <<"\t" <<"1角硬币个数" <<"\t" <<"2角硬币个数" <<"\t" <<"5角硬币个数" <<endl;
cout <<" " <<k <<"\t" <<" " <<j <<"\t" <<" " <<i <<endl;
}
else
{
p=i*5+j*2;
while(p <=10)
{
cout <<"方法" <<num <<"\t" <<"1角硬币个数" <<"\t" <<"2角硬币个数" <<"\t" <<"5角硬币个数" <<endl;
cout <<" " <<10-p <<"\t" <<j <<"\t" <<i <<endl;
p=i*5+(++j)*2;
num++;
}
}
fac(++i);
return;
}
}
就呆在云上 2008-10-12
  • 打赏
  • 举报
回复
如果你是跟我说的话
你给我发私信,如果你跟星雨说的,呵呵……
跟他比起来我就一个小菜鸟
不过你还是加油哦
Gump_BlueSky 2008-10-12
  • 打赏
  • 举报
回复
学习递归要确定递归的条件和递归的表达式
fdg个sggggg 2008-10-12
  • 打赏
  • 举报
回复
太感谢你了,我是不太明白递归方面的问题,你写的程序真好,学习的榜样啊,能教教我怎么学递归吗?
femalelover 2008-10-12
  • 打赏
  • 举报
回复
楼上两位好身手.
就呆在云上 2008-10-12
  • 打赏
  • 举报
回复
只是发现楼主对递归和循环的终止条件掌握的很不好
把定义的变量放到外面可以不?
我给你修改好了,楼上的给出了c++的方法,我看楼主还看不懂应该
呵呵
代码如下:

#include <iostream>
#include <stdlib.h>

using namespace std;
//变量定义不要放在递归里面,对递归的终止和递归不利!
int j=0,k=0,num=0;//j代表2角钱个数 //i代表5角钱个数 //k代表1角钱个数
int p;

void fac(int i);
int main(int argc, char *argv[])
{

fac(0);
return 0;
}
void fac(int i)
{
if (i == 2) //你之前的要用判断==而不是赋值=,分析:如果i是2则递归终止
{
num++;
cout <<"方法" <<num <<"\t"
<<"1角硬币个数" <<"\t" <<"2角硬币个数" <<"\t" <<"5角硬币个数" <<endl;
cout <<" "
<<0 <<"\t\t" <<" " <<0 <<"\t\t" <<" " <<i <<endl;
}
if(i <2) //如果小于2,才考虑递归的做法
{
p=i*5 + j*2;
while(p <=10) //这里死循环了!
{
num++;
cout <<"方法" <<num <<"\t"
<<"1角硬币个数" <<"\t" <<"2角硬币个数" <<"\t" <<"5角硬币个数" <<endl;
cout <<" " <<10-p <<"\t\t" <<j <<"\t\t" <<i <<endl;
j++;
p=i*5+j*2;

}
return fac(++i);
}
}
星羽 2008-10-12
  • 打赏
  • 举报
回复
重新给你写个


#include "iostream"
#include "vector"
using namespace std;

void fac(int sum = 0, vector<int> cur = vector<int>()) {
if (sum == 10) {
cout<<"1元 = ";
for (size_t i = 0; i < cur.size(); ++i) {
cout<<cur[i]<<"角 "<<(i == cur.size() - 1 ? "" : "+ ");
}
cout<<endl;
return;
}
if (sum < 10) {
vector<int> t;
switch(cur.empty() ? 5 : cur.back()) {
case 5 :
t= cur;
t.push_back(5);
fac(sum + 5, t);
case 2 :
t = cur;
t.push_back(2);
fac(sum + 2, t);
case 1 :
t = cur;
t.push_back(1);
fac(sum + 1, t);
}

}
}

int main() {

fac();

return 0;
}


------------


运行:

1元 = 5角 + 5角
1元 = 5角 + 2角 + 2角 + 1角
1元 = 5角 + 2角 + 1角 + 1角 + 1角
1元 = 5角 + 1角 + 1角 + 1角 + 1角 + 1角
1元 = 2角 + 2角 + 2角 + 2角 + 2角
1元 = 2角 + 2角 + 2角 + 2角 + 1角 + 1角
1元 = 2角 + 2角 + 2角 + 1角 + 1角 + 1角 + 1角
1元 = 2角 + 2角 + 1角 + 1角 + 1角 + 1角 + 1角 + 1角
1元 = 2角 + 1角 + 1角 + 1角 + 1角 + 1角 + 1角 + 1角 + 1角
1元 = 1角 + 1角 + 1角 + 1角 + 1角 + 1角 + 1角 + 1角 + 1角 + 1角




65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧