Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么下面的代码永远运行?_C++_Algorithm - Fatal编程技术网

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,我正在编辑以使其可读,但你更快了:)