快捷搜索:  汽车  科技

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。

c语言迭代法求解(C语言实现求特殊方程的正整数解)(1)

梳理逻辑

在正式开始这道题目之前,我们需要先梳理一下这个特殊方程当中的数学关系。

要求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"); } }结果测试

c语言迭代法求解(C语言实现求特殊方程的正整数解)(2)

c语言迭代法求解(C语言实现求特殊方程的正整数解)(3)

c语言迭代法求解(C语言实现求特殊方程的正整数解)(4)

总结

总的来说,虽然相较于之前的题目难度有所增加,但也还处于可以完成的阶段,其中的数学关系和数学逻辑是最为关键的部分,只有理清楚这部分了,才能够很好地完成这道题目。

猜您喜欢: