wusir 发表于 2019-3-4 21:24:28

加一百是完全平方

自己编了一个,运行不了,可是不知道问题,想请老师们指导,谢谢。
#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");
}

wusir 发表于 2019-3-4 21:25:13

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

BngThea 发表于 2019-3-4 21:53:42

先放main中

Croper 发表于 2019-3-4 22:02:54

你的思路呢?
C语言不是自动帮你解方程的,你只把方程输进去它是没法给你自动算出结果的-

gaoshanliushui 发表于 2019-3-4 22:24:05

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:11:54

本帖最后由 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>

jackz007 发表于 2019-3-4 23:13:32

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 不符合要求。

gaoshanliushui 发表于 2019-3-5 08:52:55

jackz007 发表于 2019-3-4 23:13
兄弟,156 不符合要求。

156 + 100 =256(16平方)
156 + 168 =324(18平方)

jackz007 发表于 2019-3-5 09:34:07

本帖最后由 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

zhuang123 发表于 2019-3-5 20:44:48

首先呢,没有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;
}

WongDragon 发表于 2019-3-5 21:13:47

先理一下思路,main不是每个程序都必须有的吗?运行后看下错误警告
页: [1]
查看完整版本: 加一百是完全平方