user-0 提问: 求大佬帮忙看看新人打的代码哪里有问题

回复:
user: user-1
content: 试试把0排除后的结果吧，除了0，其他的我就不知道了

user: user-0
content: 引用 11 楼 神棍日常坑人的回复:[quote=引用 10 楼 NGUforever 的回复:] 我换了啊 不知道你们有没有啥特别的数据实例没有，代码肯定是没问题的，只是说没有对输入的数据进行判断处理[/quote] 这学校的破oj不给我们下实验数据，我自己用你的代码试了好几组都没问题，我甚至怀疑是不是oj有问题。。。。

user: user-1
content: 引用 10 楼 NGUforever 的回复:我换了啊 不知道你们有没有啥特别的数据实例没有，代码肯定是没问题的，只是说没有对输入的数据进行判断处理

user: user-0
content: 引用 9 楼 神棍日常坑人的回复:[quote=引用 7 楼 NGUforever 的回复:]emmmm，我试了试你的，但是系统说答案错误。。。 把输出的bs和ys交换一下位置，bs代表最小公倍数，ys代表最大公约数  注释等于白写了[/quote] 我换了啊

user: user-1
content: 引用 7 楼 NGUforever 的回复:emmmm，我试了试你的，但是系统说答案错误。。。 把输出的bs和ys交换一下位置，bs代表最小公倍数，ys代表最大公约数  注释等于白写了

user: user-0
content: 好的，感谢大佬帮忙

user: user-0
content: 恳求大佬帮忙吧，就算没找到错给个参考例子也行，如果过了的话我就立马结帖

user: user-0
content: emmmm，我试了试你的，但是系统说答案错误。。。

user: user-1
content: 引用 楼主 NGUforever 的回复:题目如下： 题目描述 已知两个正整数m和n，求其最大公约数和最小公倍数。  输入与输出要求： 输入的正整数m和n之间用空格分隔。输出的最大公约数和最小公倍数之间用空格分隔。测试用例保证m、n及其最小公倍数可以用int存储。  程序运行效果： Sample 1： 输入：12 36 输出：12 36 Sample 2： 输入：13 7 输出：1 91 我的代码： #include <stdio.h> int main () {     int m,n,min,flag1;     int max,tool;     flag1=1;      scanf ("%d%d",&m,&n);     if (n>m)     {         tool=n;         n=m;         m=tool;     }     tool=m;     while (flag1==1)     {         if ((tool%m==0)&&(tool%n==0))         {             max=tool;             flag1=0;         }          tool=tool+1;     }     flag1=1;     tool=n;     while (flag1==1)     {         if ((m%tool==0)&&(n%tool==0))         {             min=tool;             flag1=0;         }          tool=tool-1;     }     printf ("%d %d\n",min,max);          return 0; } 每次提交都显示运行超时，自己找了好久找不到问题在哪，求大佬帮忙看看ORZ while(true)结束循环，你这里flag1一开始就被置为1了，while(flag1 == 1)循环就直接结束了，循环里面的内容就不会被执行

user: user-1
content: 写一段给你参考一下吧，也可以用for循环暴力破解，感觉超时可能就是你用的两个while的原因  #include<stdio.h> int main(){ 	int m, n, temp, bs, ys; 	scanf ("%d %d", &m, &n); 	//判断 m 、 n 的大小，大的给 m ，小的给 n 	if(m < n){ 		temp = n; 		n = m;  		m = temp; 	} 	//将最小公倍 bs 数暂定为 m 与 n 的乘积 	bs = m * n; 	//使用取余的方法求最大公因数 ys 	while(1){ 		if(m % n == 0) 			break; 		temp = m % n; 		m = n; 		n = temp; 	}; 	ys = n; 	//将 m 与 n 的乘积除以最大公因数 ys 得最小公倍数 bs 	bs /= ys; 	printf("%d %d\n", bs, ys); 	return 0; }

user: user-0
content: 引用 4 楼 神棍日常坑人的回复:[quote=引用 3 楼 NGUforever 的回复:][quote=引用 2 楼 神棍日常坑人 的回复:][quote=引用 楼主 NGUforever 的回复:]题目如下： 题目描述 已知两个正整数m和n，求其最大公约数和最小公倍数。  输入与输出要求： 输入的正整数m和n之间用空格分隔。输出的最大公约数和最小公倍数之间用空格分隔。测试用例保证m、n及其最小公倍数可以用int存储。  程序运行效果： Sample 1： 输入：12 36 输出：12 36 Sample 2： 输入：13 7 输出：1 91 我的代码： #include <stdio.h> int main () {     int m,n,min,flag1;     int max,tool;     flag1=1;      scanf ("%d%d",&m,&n);     if (n>m)     {         tool=n;         n=m;         m=tool;     }     tool=m;     while (flag1==1)     {         if ((tool%m==0)&&(tool%n==0))         {             max=tool;             flag1=0;         }          tool=tool+1;     }     flag1=1;     tool=n;     while (flag1==1)     {         if ((m%tool==0)&&(n%tool==0))         {             min=tool;             flag1=0;         }          tool=tool-1;     }     printf ("%d %d\n",min,max);          return 0; } 每次提交都显示运行超时，自己找了好久找不到问题在哪，求大佬帮忙看看ORZ while(true)结束循环，你这里flag1一开始就被置为1了，while(flag1 == 1)循环就直接结束了，循环里面的内容就不会被执行[/quote] emmmm,编译器显示会运行while里的东西啊，是我理解错大佬的意思了吗[/quote] 我说反了，是对的，运行超时没看出来，不过你的代码思路确实挺复杂的[/quote] 好吧，谢谢大佬帮忙

user: user-1
content: 引用 3 楼 NGUforever 的回复:[quote=引用 2 楼 神棍日常坑人 的回复:][quote=引用 楼主 NGUforever 的回复:]题目如下： 题目描述 已知两个正整数m和n，求其最大公约数和最小公倍数。  输入与输出要求： 输入的正整数m和n之间用空格分隔。输出的最大公约数和最小公倍数之间用空格分隔。测试用例保证m、n及其最小公倍数可以用int存储。  程序运行效果： Sample 1： 输入：12 36 输出：12 36 Sample 2： 输入：13 7 输出：1 91 我的代码： #include <stdio.h> int main () {     int m,n,min,flag1;     int max,tool;     flag1=1;      scanf ("%d%d",&m,&n);     if (n>m)     {         tool=n;         n=m;         m=tool;     }     tool=m;     while (flag1==1)     {         if ((tool%m==0)&&(tool%n==0))         {             max=tool;             flag1=0;         }          tool=tool+1;     }     flag1=1;     tool=n;     while (flag1==1)     {         if ((m%tool==0)&&(n%tool==0))         {             min=tool;             flag1=0;         }          tool=tool-1;     }     printf ("%d %d\n",min,max);          return 0; } 每次提交都显示运行超时，自己找了好久找不到问题在哪，求大佬帮忙看看ORZ while(true)结束循环，你这里flag1一开始就被置为1了，while(flag1 == 1)循环就直接结束了，循环里面的内容就不会被执行[/quote] emmmm,编译器显示会运行while里的东西啊，是我理解错大佬的意思了吗[/quote] 我说反了，是对的，运行超时没看出来，不过你的代码思路确实挺复杂的

user: user-0
content: 引用 2 楼 神棍日常坑人 的回复:[quote=引用 楼主 NGUforever 的回复:]题目如下： 题目描述 已知两个正整数m和n，求其最大公约数和最小公倍数。  输入与输出要求： 输入的正整数m和n之间用空格分隔。输出的最大公约数和最小公倍数之间用空格分隔。测试用例保证m、n及其最小公倍数可以用int存储。  程序运行效果： Sample 1： 输入：12 36 输出：12 36 Sample 2： 输入：13 7 输出：1 91 我的代码： #include <stdio.h> int main () {     int m,n,min,flag1;     int max,tool;     flag1=1;      scanf ("%d%d",&m,&n);     if (n>m)     {         tool=n;         n=m;         m=tool;     }     tool=m;     while (flag1==1)     {         if ((tool%m==0)&&(tool%n==0))         {             max=tool;             flag1=0;         }          tool=tool+1;     }     flag1=1;     tool=n;     while (flag1==1)     {         if ((m%tool==0)&&(n%tool==0))         {             min=tool;             flag1=0;         }          tool=tool-1;     }     printf ("%d %d\n",min,max);          return 0; } 每次提交都显示运行超时，自己找了好久找不到问题在哪，求大佬帮忙看看ORZ while(true)结束循环，你这里flag1一开始就被置为1了，while(flag1 == 1)循环就直接结束了，循环里面的内容就不会被执行[/quote] emmmm,编译器显示会运行while里的东西啊，是我理解错大佬的意思了吗

user: user-0
content: 题目描述 问题描述： 已知整数a、b、c。你的任务是求出区间[a,b]内的整数，满足该数与“该数的所有因数（不包括本身但包括1,1的因数和按0处理）相加之和”的差的绝对值小于等于c的数字。例如27的因数是1、3、9。那么27与27的所有因数和的差为:27-(1+3+9)=14。  输入与输出要求： 输入三个整数a、b、c。a、b代表所求区间范围，满足1<=a<=b<=10000，c代表限制条件，c>=0。输出满足条件的整数，每五个数为一行，整数之间用tab分隔，最后一个数后为换行符。当该区间没有符合条件的整数时，输出“There is no proper number in the interval.”  程序运行效果： Sample 1： 输入：1 10000 0 输出：6          28        496       8128 Sample 2： 输入：2000 5000 4 输出：2048    2144     4030     4096 Sample 3： 输入：900 1000 0 输出：There is no proper number in the interval. 我的代码： #include <stdio.h> #include <math.h> int main () {    int a,b,c,ans,i1,i2,d,e,flag,flag1;    i2=c=d=flag=flag1=1;    i1=2;    e=1;     scanf ("%d%d%d",&a,&b,&c);     ans=a;     while (ans<=b)     {         i1=2;         e=1;         if ((ans==1&&b==1)&&(c!=0))                 {ans=ans+1;                 printf ("1");                 flag1=0;}         if (ans==1)             ans=ans+2;         while (i1<ans&&flag1==1)         {             if (ans%i1==0)                 {d=ans/i1;                 e=e+d;}             i1=i1+1;         }         if (fabs(e-ans)<=c&&flag1==1)         {             printf ("%d\t",ans);             flag=0;         }         ans=ans+1;     }     if (flag==1&&flag1==1)     {printf ("There is no proper number in the interval.");}     printf ("\n");     return 0; } 这一题我每次提交都显示答案错误，哭了，试了好多例子都没问题啊ORZ，如果大佬有空的话可以顺带把这题也解答一下吗，拜托您了