求全部正整数解出现错误,提交只是部分正确,大家帮我看看哪里错了
本题要求对任意给定的正整数N,求方程X 2 +Y 2 =N的全部正整数解。#include<stdio.h>
#include<math.h>
int main(int argc,char** argv){
int n;
scanf("%d",&n);
int j,k;
int t=0;
for (j=1;j<sqrt(n);j++){ //递增j
k=n-j*j; //
int i=sqrt(k); //将n-j*j结果求根并且int;
if (i*i==k && i!=0){
printf("%d %d\n",j,i);
t=1;
}
}
if (!t){
printf("No Solution");
}
return 0;
} 是x*x+y*y=n的函数 你把错误上传一下,或者是验证不符合的数据 提交时间 状态 分数 题目 编译器 耗时 用户
2019/8/7 18:16:56
部分正确
2 7-21 C (clang) 2 ms rayng
测试点 提示 结果 耗时 内存
0 sample 1 答案错误 2 ms 296 KB
1 sample 2 答案正确 2 ms 284 KB
2 最大有解N 答案错误 2 ms 264 KB 你是说计算两个整数的平方等于所给的数,求这两个整数所有可能值对吧!
x^2 + y^2 = n(n由用户所给定);求 x 和 y。
你的代码没问题,可以求出所有正整数解。由于 j 小于 n 的 开方,j 的值由 0 到 n 的开方,对应 i的值就会由 n 的开方到 0,就会出现重复解,可以再给 j 增加这么一条限制 j <= i ;
源代码如下:
#include<stdio.h>
#include<math.h>
int main(int argc,char** argv){
int n;
scanf("%d", &n);
int i, j, k;
int t = 0;
for (i = 0,j = 1;j < sqrt(n) && j <= i; j++){ //递增j
k=n-j*j; //
i=sqrt(k); //将n-j*j结果求根并且int;
if (i*i==k ){
printf("%d %d\n",j,i);
t=1;
}
}
if (!t){
printf("No Solution");
}
return 0;
}
或者对你的代码最简单的修改是:
本题要求对任意给定的正整数N,求方程X 2 +Y 2 =N的全部正整数解。
#include<stdio.h>
#include<math.h>
int main(int argc,char** argv){
int n;
scanf("%d",&n);
int j,k;
int t=0;
for (j=1;j<sqrt(n);j++){ //递增j
k=n-j*j; //
int i=sqrt(k); //将n-j*j结果求根并且int;
if (i*i==k && j <= i ){// j <= i, 其中 j > 0, i <= 0 就不可能了。
printf("%d %d\n",j,i);
t=1;
}
}
if (!t){
printf("No Solution");
}
return 0;
} 新学 发表于 2019-8-7 20:41
你是说计算两个整数的平方等于所给的数,求这两个整数所有可能值对吧!
x^2 + y^2 = n(n由用户所给定); ...
谢谢不过依然是错的,我的代码是把一个数递增,然后给出的n减去这个递增数的平方,把这部分求根并化为整数,再看递增数的平方与求根的平方是否等于给出的n,所以不存在重复解。
主要是代码就是通不过pta的检测。 AmosAlbert 发表于 2019-8-7 16:57
你把错误上传一下,或者是验证不符合的数据
提交时间 状态 分数 题目 编译器 耗时 用户
2019/8/7 18:16:56
部分正确
2 7-21 C (clang) 2 ms rayng
测试点 提示 结果 耗时 内存
0 sample 1 答案错误 2 ms 296 KB
1 sample 2 答案正确 2 ms 284 KB
2 最大有解N 答案错误 2 ms 264 KB 2我运行后答案是(1,1)没问题吖!
0和1是的确有问题的
0的答案应该是(0,0)
问题原因:
你看这条判断语句for (j=1;j<sqrt(n);j++)
j的初始值为1,而sprt(0)还是0,1<0,进不到这个循环里,所以输出no solution
1的答案应该是(1,0)或(0,1)
问题原因:同上1=1而不小于1。所以进不到循环里面
解决方案 :建议写两个if单独判断1,0.或者调节这条语句for (j=1;j<sqrt(n);j++)里面的值
可以给个最佳答案吗???楼主·{:10_257:}{:10_257:} #include<stdio.h>
#include<math.h>
int main(int argc,char** argv){
int n;
scanf("%d",&n);
int j,k;
int t=0;
for (j=1;j<sqrt(n);j++){ //递增j
k=n-j*j; //
int i=sqrt(k); //将n-j*j结果求根并且int;
if (i*i==k && j<i){
printf("%d %d\n",j,i);
t=1;
}
}
if (!t){
printf("No Solution");
}
return 0;}
AmosAlbert 发表于 2019-8-8 11:52
2我运行后答案是(1,1)没问题吖!
0和1是的确有问题的
0的答案应该是(0,0)
问题原因:
你看这条判断语句for (j=1;j<sqrt(n);j++)
j的初始值为1,而sprt(0)还是0,1<0,进不到这个循环里,所以输出no solution
其实0,1标明no solution是对的,因为要求正整数解,我的错误想了以后是没有考虑J<K的关系,但还是感谢你的启发。 ricocococo 发表于 2019-8-8 17:21
问题原因:
你看这条判断语句for (j=1;j
谢谢楼主(0不是正整数,哈哈哈,忘记了)
页:
[1]