排列计算器在 C++ 中不起作用
Permutation calculator isn't working in C++
美好的一天!我的排列计算器有问题。由于某种原因,最终结果始终为 1。目前我们不允许使用递归,所以我选择使用 for 循环来查找阶乘。
这是我的代码:
#include <iostream>
using namespace std;
int fact(int x);
int perm(int y, int z);
int n, r, npr;
char ch;
int main()
{
do{
cout<<"Enter n (object/s): ";
cin>> n;
cout<< "Enter r (sample/s): ";
cin>> r;
npr= perm(n,r);
cout<< "Value of "<< n<<"P"<< r<< " = "<< npr<<endl;
cout<<"Would you like to repeat this again? [y/n] \n";
cin>> ch;
cout<< "\n";
} while(ch=='y');
cout<< "Thank you and have a nice day!";
return 0;
}
int fact(int x)
{
int number, cum = 1;
for(number=1;number<=n;number++)
cum=cum*number;
return cum;
}
int perm(int y, int z)
{
return fact(n) / fact(n-r);
}
您的代码中的问题是不必要地滥用全局变量。这个函数:
int fact(int x)
{
int number, cum = 1;
for(number=1;number<=n;number++)
cum=cum*number;
return cum;
}
总是计算 n
的阶乘。无论调用它时传递什么参数,因此这里:
int perm(int y, int z)
{
return fact(n) / fact(n-r);
}
fact(n)
returns n
的阶乘。 fact(n-r)
returns n
的阶乘。结果总是 1
。删除全局变量并使函数真正使用它们的参数:
#include <iostream>
int fact(int x);
int perm(int y, int z);
int main() {
int n = 0;
int r = 0;
char ch = 'n';
do{
std::cout << "Enter n (object/s): \n";
std::cin >> n;
std::cout << "Enter r (sample/s): \n";
std::cin >> r;
auto npr = perm(n,r);
std::cout << "Value of "<< n << "P" << r << " = " << npr << "\n";
std::cout << "Would you like to repeat this again? [y/n] \n";
std::cin >> ch;
std::cout << "\n";
} while(ch=='y');
std::cout << "Thank you and have a nice day!";
}
int fact(int x) {
int cum = 1;
for(int number=1;number<=x;number++) {
cum=cum*number;
}
return cum;
}
int perm(int y, int z) {
return fact(y) / fact(y-z);
}
美好的一天!我的排列计算器有问题。由于某种原因,最终结果始终为 1。目前我们不允许使用递归,所以我选择使用 for 循环来查找阶乘。
这是我的代码:
#include <iostream>
using namespace std;
int fact(int x);
int perm(int y, int z);
int n, r, npr;
char ch;
int main()
{
do{
cout<<"Enter n (object/s): ";
cin>> n;
cout<< "Enter r (sample/s): ";
cin>> r;
npr= perm(n,r);
cout<< "Value of "<< n<<"P"<< r<< " = "<< npr<<endl;
cout<<"Would you like to repeat this again? [y/n] \n";
cin>> ch;
cout<< "\n";
} while(ch=='y');
cout<< "Thank you and have a nice day!";
return 0;
}
int fact(int x)
{
int number, cum = 1;
for(number=1;number<=n;number++)
cum=cum*number;
return cum;
}
int perm(int y, int z)
{
return fact(n) / fact(n-r);
}
您的代码中的问题是不必要地滥用全局变量。这个函数:
int fact(int x) { int number, cum = 1; for(number=1;number<=n;number++) cum=cum*number; return cum; }
总是计算 n
的阶乘。无论调用它时传递什么参数,因此这里:
int perm(int y, int z) { return fact(n) / fact(n-r); }
fact(n)
returns n
的阶乘。 fact(n-r)
returns n
的阶乘。结果总是 1
。删除全局变量并使函数真正使用它们的参数:
#include <iostream>
int fact(int x);
int perm(int y, int z);
int main() {
int n = 0;
int r = 0;
char ch = 'n';
do{
std::cout << "Enter n (object/s): \n";
std::cin >> n;
std::cout << "Enter r (sample/s): \n";
std::cin >> r;
auto npr = perm(n,r);
std::cout << "Value of "<< n << "P" << r << " = " << npr << "\n";
std::cout << "Would you like to repeat this again? [y/n] \n";
std::cin >> ch;
std::cout << "\n";
} while(ch=='y');
std::cout << "Thank you and have a nice day!";
}
int fact(int x) {
int cum = 1;
for(int number=1;number<=x;number++) {
cum=cum*number;
}
return cum;
}
int perm(int y, int z) {
return fact(y) / fact(y-z);
}