c语言迭代法求解(C语言实现求特殊方程的正整数解)
c语言迭代法求解(C语言实现求特殊方程的正整数解)1、要求输入正整数N,小于等于10000,说明用到一个scanf函数,并且要对N进行判断。如果是用穷举法的话,写两个for循环,将范围从0到100的正整数X和Y分别代入判断即可,这样就会得到多组解。其中X<=Y,每组解占1行,两个数字间以一个空格分隔,按X的递增顺序打印,如果没有解,则打印No Solution。在正式开始这道题目之前,我们需要先梳理一下这个特殊方程当中的数学关系。要求X^2 Y^2=N的全部正整数解,那么X和Y的范围大小应该是确定的,假设N用最大值10000代入,X和Y必然又是大于0的,所以X和Y都必然会小于100。
用C语言来求方程的解,一般我们是需要理清楚方程的数学关系和数学逻辑,然后写出对应的式子,但是呢,在C语言当中,我们也可以使用到穷举法,也就是用for循环,把所有数值的可能都放进去,然后列方程做一个判断,来得到所有可能的结果。
今天这道题目呢,就是用到这样的方法,因为只是梳理数学逻辑无法做出这道题,所以用for循环找寻所有可能解是最好的办法。
这道题呢是求特殊方程的正整数解,要求是:
任意给定的正整数N,小于等于10000,求方程X^2 Y^2=N的所有正整数解。
其中X<=Y,每组解占1行,两个数字间以一个空格分隔,按X的递增顺序打印,如果没有解,则打印No Solution。
梳理逻辑在正式开始这道题目之前,我们需要先梳理一下这个特殊方程当中的数学关系。
要求X^2 Y^2=N的全部正整数解,那么X和Y的范围大小应该是确定的,假设N用最大值10000代入,X和Y必然又是大于0的,所以X和Y都必然会小于100。
如果是用穷举法的话,写两个for循环,将范围从0到100的正整数X和Y分别代入判断即可,这样就会得到多组解。
1、要求输入正整数N,小于等于10000,说明用到一个scanf函数,并且要对N进行判断。
2、两个for循环来梳理X和Y所有可能的值。
3、在这之后做一个条件判断,也就是X^2 Y^2是否等于N,并且要满足X小于Y。
4、要满足打印格式要求,printf语句要注意。
5、这里可以用到一个计数法来进行判断,当满足方程条件时,计数count=1,否则为0,则打印输出No Solution。
代码实现//求特殊方程的正整数解
#include<stdio.h>
int main(){
int N;
int count=0;
int X = 0;
int Y = 0;
scanf("%d" &N);
if(N>10000){
scanf("%d" &N);
}
for(X=1;X<N;X ){
for(Y=1;Y<N;Y ){
if(X*X Y*Y==N&&X<Y){
printf("%d %d\n" X Y);
count = 1;
}
}
}
if(count!=1){
printf("No Solution");
}
}
结果测试
总的来说,虽然相较于之前的题目难度有所增加,但也还处于可以完成的阶段,其中的数学关系和数学逻辑是最为关键的部分,只有理清楚这部分了,才能够很好地完成这道题目。