上面说的是题目,下面给出我的代码,#include <iostream>
using namespace std;
int main()
{
int i,j,k;
for(i=0;i<=10;i++)
for(j=0;j<=5;j++)
for(k=0;k<=3;k++)
if(i*1+j*2+k*5==10)
{
while(i!=0)
{
cout<<1<<"+";
i--;
}
while(j!=0)
{
cout<<2<<"+";
j--;
}
while(k!=0)
{
cout<<5<<"+";
k--;
}
cout<<"=10"<<endl;
}
return 0;
}
不知道我的代码为什么运行结果只有5+5+=10,,一直在那循环输出,求高手指教下,
using namespace std;
int main()
{
int i,j,k;
for(i=0;i<=10;i++)
for(j=0;j<=5;j++)
for(k=0;k<=3;k++)
if(i*1+j*2+k*5==10)
{
while(i!=0)
{
cout<<1<<"+";
i--;
}
while(j!=0)
{
cout<<2<<"+";
j--;
}
while(k!=0)
{
cout<<5<<"+";
k--;
}
cout<<"=10"<<endl;
}
return 0;
}
不知道我的代码为什么运行结果只有5+5+=10,,一直在那循环输出,求高手指教下,
for(int i = 1; i <= 10; i++) // 1的个数
{
for(int j = 1; j <= 5; j++) // 2的个数
{
for(int k = 1; k <= 2; k++) // 5的个数
{
if( 1*i + 2*j + 5*k == 10 )
{
cout << "1*" << i+30 << " + 2*" << j+30 << " + 5*" << k+30 << " = 10" << endl;
}
}
}
}
// 题目:1,2,5三个数字,每个数字可以有任意多。
// 问题:求用这三个数字加法组合成10的方案。
//
// 递归寻找合适的组合
// a - 存储当前组合情况的数组(其中第一个位置仅用于启动递归,不在结果中)
// pos - 下一个数字放在数组中的位置
// rest - 还剩余需完成的和数
void comb( int *a, int pos, int rest )
{
// 如果当前组合恰好已经符合结果,则输出
if ( rest == 0 ) {
for ( int i=1; i < pos; i++ ) {
printf( "%d ", a[i] );
}
printf( "\r\n" );
} // 如果已经结束,则返回
if ( rest <= 0 ) {
return;
} // 如果上一个位置填的数不大于 1,则当前位置试探填 1,并递归
if ( a[pos-1] <= 1 ) {
a[pos] = 1; comb( a, pos + 1, rest - 1 );
} // 如果上一个位置填的数不大于 3,则当前位置试探填 3,并递归
if ( a[pos-1] <= 3 ) {
a[pos] = 3; comb( a, pos + 1, rest - 3 );
} // 如果上一个位置填的数不大于 5,则当前位置试探填 5,并递归
if ( a[pos-1] <= 5 ) {
a[pos] = 5; comb( a, pos + 1, rest - 5 );
}
}void test()
{
// 开辟一个缓冲区(第一个位置置 0,用于启动递归)
int a[11] = {0}; // 递归查找所有的组合方案
comb( a, 1, 10 );
}// 1 1 1 1 1 1 1 1 1 1
// 1 1 1 1 1 1 1 3
// 1 1 1 1 1 5
// 1 1 1 1 3 3
// 1 1 3 5
// 1 3 3 3
// 5 5
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
下面的测试代码显示的是10中情况:
// LianXi.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
//int i,j,k;
int i = 0;
int j = 0;
int k = 0; for(i=0;i<=10;i++)
{
for(j=0;j<=5;j++)
{
for(k=0;k<=2;k++)
{
if(i*1+j*2+k*5 == 10)
{
if(i != 0)
{
//cout<<1<<"+";
cout<<"";
//i--;
}
if(j != 0)
{
//cout<<2<<"+";
cout<<"";
//j--;
}
if(k != 0)
{
//cout<<5<<"+";
cout<<"";
//k--;
} //cout<<"=10"<<endl; cout<<"1*"<<i<<"+"<<"2*"<<j<<"+"<<"5*"<<k<<" = "<<10<<endl;
}
}
}
}
system("pause");
return 0;
}
运行结果:
才发现,我的代码有点小错错误,cout后面那些30应该是0x30