一个变量问题,请各位解答一下,谢谢
各位前辈,今天编译了一个程序,但是一直没有出正确结构,其中change函数中Y变量的增长很奇异啊,请问这到底是为什么呢?
//------------------------------
//将100元钱兑换成20元,10元,5元,2元,1元,5角。编程求不同的兑法。要求每种兑法中都只含有20元,10元,5元,2元,1元,5角中的三种钞票。
//------------------------------
#include<iostream>
#include<stdlib.h>
#include<math.h>
using namespace std;
float change(float b[6],int i,int j,int k)
{
float x,y,z,c;
for(x=0;x<=100/b[i];x++)
{
if(b[i]*x==100)
cout<<"use "<<x<<"张"<<b[i]<<"\n";
else
{
for(y=0;y<100/b[j]&&x*b[i]+b[j]*y<=100;y++)
z=(100-b[i]*x-b[j]*y)/b[k];
cout<<"使用 "<<x<<"张"<<b[i]<<" "<<y-1<<"张"<<b[j]<<" "<<z<<"张"<<b[k]<<" \n";
}
}
}
int main()
{
float a[6]={20,10,5,2,1,0.5};
int i,j,k;
int x=1;
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
for(k=j+1;k<6;k++,x++)
{
cout<<"kinds of RMB:"<<x<<": "<<a[i]<<" "<<a[j]<<" "<<a[k]<<" \n";
change(a,i,j,k);
}
system("pause");
}
[解决办法]
你整个代码中不要用float运算,你改成整型好了,元的乘以10,变量取名有意义点,最好每个变量后加上它的面值,看起来轻松一点,这样看着太累了。
[解决办法]
z=(100-b[i]*x-b[j]*y)/b[k];
你这个z为float不行 除后会有小数存在的 同1楼 就是xyz要改成int 且z那一句还得判断是否刚好为100
否则就不满足的
[解决办法]
C/C++ code
//递归全排列
template<class T>
void Perm(T list[], int k, int m)
{// Generate all permutations of list[k:m].
int i;
if (k == m)
{
change(list[0], list[1], list[2]);
}
else
for (i = k; i <= m; i++)
{
Swap(list[k], list[i]);
Perm(list, k+1, m);
Swap(list[k], list[i]);
}
}
template<class T>
inline void Swap(T& a, T& b)
{// Swap a and b.
T temp = a;
a = b;
b = temp;
}
void change(int value1, int value2, int value3)
{
for (int i = 0; i<=(1000/value1); i++)
for(int j = 0; j<=(1000/value2); j++)
for(int k = 0; k<=(1000/value3); k++)
{
if (i*value1+j*value2+k*value3 == 1000)
{
cout<<i<<"张"<<float(value1)/float(10)<<"元面值";
cout<<j<<"张"<<float(value2)/float(10)<<"元面值";
cout<<k<<"张"<<float(value3)/float(10)<<"元面值"<<endl;
}
}
cout<<endl;
}
int main()
{
int a[] ={200, 100, 50, 20, 10, 5 };
Perm(a, 0, 2);
system("pause");
return 0;
}
[解决办法]
有三处需要处理:
void change(float b[6],int i,int j,int k) { int x,y,z;[color=#FF0000]//1. float 改int[/color] for(x=0;x <=100/b[i];x++) { if(int(b[i]*x)==100)[color=#FF0000]//2. 判断需要变成int ,int才有==[/color] cout <<"use " <<x <<"张" <<b[i] <<"\n"; else { for(y=0;x*b[i]+b[j]*y <=100;y++) {[color=#FF0000]//3. 输出要在for里面,这也可能是你得y诡异的原因[/color] z=(100-b[i]*x-b[j]*y)/b[k]; cout <<"使用 " <<x <<"张" <<b[i] <<" " <<y [color=#FF0000](y-1?笔误?)[/color]<<"张" <<b[j] <<" " <<z <<"张" <<b[k] <<" \n"; } } } }
[解决办法]
晕倒,注释代码不能加颜色!
void change(float b[6],int i,int j,int k)
{
int x,y,z;//1. float 改int
for(x=0;x <=100/b[i];x++)
{
if(int(b[i]*x)==100)//2. 判断需要变成int ,int才有==
cout <<"use " <<x <<"张" <<b[i] <<"\n";
else
{
for(y=0;x*b[i]+b[j]*y <=100;y++)
{//3. 输出要在for里面,这也可能是你得y诡异的原因
z=(100-b[i]*x-b[j]*y)/b[k];
cout <<"使用 " <<x <<"张" <<b[i] <<" " <<y (y-1?笔误?)<<"张" <<b[j] <<" " <<z <<"张" <<b[k] <<" \n";
}
}
}
}