加一百是完全平方
自己编了一个,运行不了,可是不知道问题,想请老师们指导,谢谢。#include<stdio.h>
#include<math.h>
long int i,s,c;
scanf("%ld",&i);
if (sqrt(i+100)==s)
{if (sqrt(i+268)==c)
{printf("%ld",i);
}
else
{printf("error");
}
}
else
{printf("error");
}
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 先放main中 你的思路呢?
C语言不是自动帮你解方程的,你只把方程输进去它是没法给你自动算出结果的- num = 1
while True:
if math.sqrt(num + 100) == int(math.sqrt(num + 100)) and math.sqrt(num + 268) == int(math.sqrt(num + 268)):
break
num += 1
这是python写的,容易看懂。得到的结果为21.
主要思路就是:对于这个数是谁的平方并不关心,只要按题设条件把(这个数+100)或者(这个数+168)开方,开方以后得到一个整数就是了。
为了判断是不是整数,只需看取整后还是不是它本身。。。
num运行到21就break了,其实还有,比如156也符合要求 本帖最后由 jackz007 于 2019-3-4 23:20 编辑
#include <stdio.h>
#include <math.h>
// x + 100 = m ^ 2
// x + 268 = n ^ 2
// n ^ 2 - m ^ 2 = 168
// (n - m)(n + m) = 168
// a = n - m
// b = n + m
main(void)
{
int a , b , k , m , n , r , x ;
r = (int) sqrt(168) + 1 ;
for(k = 2 ; k < r ; k ++) {
if(! (168 % k)) {
a = k ;
b = 168 / k ;
if (! ((a + b) % 2)) {
n = (b + a) / 2 ;
m = (b - a) / 2 ;
x = m * m - 100 ;
if(x > 0) printf("%d\n" , x) ;
}
}
}
}
运行实况:
F:\\00.00.Exercise\C\temp>xxx
1581
261
21
F:\\00.00.Exercise\C\temp> gaoshanliushui 发表于 2019-3-4 22:24
num = 1
while True:
if math.sqrt(num + 100) == int(math.sqrt(num + 100)) and math.sqrt(num + 2 ...
兄弟,156 不符合要求。 jackz007 发表于 2019-3-4 23:13
兄弟,156 不符合要求。
156 + 100 =256(16平方)
156 + 168 =324(18平方) 本帖最后由 jackz007 于 2019-3-5 09:40 编辑
gaoshanliushui 发表于 2019-3-5 08:52
156 + 100 =256(16平方)
156 + 168 =324(18平方)
兄弟,是加 100 再加 168,连你自己的代码里加的也是 268。
156 + 100 = 256
156 + 100 + 168 = 424
首先呢,没有main()这个主函数;
再次呢,变量s,c都没有赋值就参与运算,而且你的{}很乱;
最后呢,加一百是完全平方,应该不断的迭代去找到那个数,应该有循环;
下面是我写的,找到第一个完全平方的
#include<stdio.h>
#include<math.h>
int main()
{
unsigned i=0;
while(1)
{
if((int( sqrt(i+100) ) ==sqrt(i+100) )&& ( int(sqrt(i+168)) ==sqrt(i+168)) )
break;
i++;
}
printf("%d\n",i);
return 0;
}
先理一下思路,main不是每个程序都必须有的吗?运行后看下错误警告
页:
[1]