C++ 为什么下面的代码永远运行?
我不明白为什么以下代码永远运行:C++ 为什么下面的代码永远运行?,c++,algorithm,C++,Algorithm,我不明白为什么以下代码永远运行: #include <cstdlib> #include <iostream> #include<iostream> #define in_least_terms(n,d) (gcd((n),(d))==1) using namespace std; unsigned int gcd(unsigned int x,unsigned int y){ while(y!=0){ unsigned int t
#include <cstdlib>
#include <iostream>
#include<iostream>
#define in_least_terms(n,d) (gcd((n),(d))==1)
using namespace std;
unsigned int gcd(unsigned int x,unsigned int y){
while(y!=0){
unsigned int t=y;
y=x%y;
x=t;
}
return x;
}
void generate()
{
unsigned int sum,numerator,denominator;
printf("0\n");
for(sum=2;sum<2000;sum++){
for(numerator=1;numerator<=sum-1;numerator++){
denominator=sum-numerator;
if(denominator==1)
printf(" %u]n-%u\n",numerator,numerator);
else if((in_least_terms( numerator,denominator)))
printf("%u/%u\n-%u/%u\n", numerator, denominator, numerator, denominator);
}
}
}
int main(int argc, char *argv[])
{
generate();
system("PAUSE");
return EXIT_SUCCESS;
}
#包括
#包括
#包括
#至少定义术语(n,d)(gcd((n),(d))==1)
使用名称空间std;
无符号整数gcd(无符号整数x,无符号整数y){
而(y!=0){
无符号整数t=y;
y=x%y;
x=t;
}
返回x;
}
void生成()
{
无符号整数和、分子、分母;
printf(“0\n”);
对于(sum=2;sum它不会“永远”运行,只是需要很长的时间才能完成任务…据我所知,您有-1+n*(n+1)/2
内部循环的迭代,在您的情况下是200999次!
printf方法需要一段时间才能将所有内容打印到屏幕上
如果您运行以下代码(从输出中剥离以澄清循环维度),您会看到为内部循环的每个循环迭代打印一个x…正如您所看到的,这是很多x…可能内部循环的边界有问题
#include <cstdlib>
#include <iostream>
#include<iostream>
#include <cstdio>
#define in_least_terms(n,d) (gcd((n),(d))==1)
using namespace std;
unsigned int gcd(unsigned int x,unsigned int y){
while(y!=0){
unsigned int t=y;
y=x%y;
x=t;
}
return x;
}
void generate()
{
unsigned int sum,numerator,denominator;
printf("0\n");
for(sum=2;sum<2000;sum++){
for(numerator=1;numerator<=sum-1;numerator++){
printf("x");
denominator=sum-numerator;
if(denominator==1){}
else if((in_least_terms( numerator,denominator))){}
}
}
}
int main(int argc, char *argv[])
{
generate();
system("PAUSE");
return EXIT_SUCCESS;
}
#包括
#包括
#包括
#包括
#至少定义术语(n,d)(gcd((n),(d))==1)
使用名称空间std;
无符号整数gcd(无符号整数x,无符号整数y){
而(y!=0){
无符号整数t=y;
y=x%y;
x=t;
}
返回x;
}
void生成()
{
无符号整数和、分子、分母;
printf(“0\n”);
对于(sum=2;sumMaan,你有2k+rep和397个问题,格式化你的代码。你不断地在几个问题中转储代码,要求我们找到问题或看看它是否正确。你现在应该知道这不是提问的方式。特别是如果你应该很容易跟踪自己。你应该尝试的第一件事是运行在调试器中编写代码,然后在几秒钟后将其打断。这应该会让您知道它可能进入无限循环的位置。如果这不能帮助您缩小问题范围,请使用您看到的堆栈跟踪报告。那么您发现了什么?您尝试了什么?您的循环如何运行?例如,使其永远运行的一种方法是永远不要按任何键结束:)谢谢@Martin B,我正在编辑以使其可读,但你更快了:)