一数三平方

问题描述:

什么是一数三平方呢?就是这样的一个六位数,它本身是一个整数的平方,其高三位和低三位也分别是一个整数的平方,如225635=475的平方。求满足上述条件的所有六位数。

解题思路:

利用for循环对100000~999999之间的所有的数按条件进行判断,将满足条件的数在屏幕上打印出来。设循环变量为i,初值为100000,从100000变化到999999;依次判断条件是否成立,如果成立则输出,否则不输出。

1.对正在判断的数 i 进行 开平方,得到一个长整型的数值 n .

n=(long)sqrt((float)i);

 程序中用到了数学函数sqrt(),因此在头文件中就必须包括数学函数库文件“#include<math.h>”

sqrt函数的一般形式:double sqrt(double sum),sqrt的函数返回值是一个double型,我们将sqrt函数的返回值强制转换成长整型,这样会使开平方后得到的小数失去小数点后面的部分,则平方后就不是原来的数了,若小数点后面为0,就不会产生数据流失,这样开方后的数和平方的数还是一样的,利用这个办法来判断一个数开方之后是整数。

,2.判断n的平方是否等于i,如果等于则求出其高三位n1和低三位n2;

if (i == n * n)
		{
			n1 = i / 1000;
			n2 = i % 1000;
}

3.对高三位n1和低三位n2开平方,分别得到一个长整型的数值n3和n4;

n3 = (long)sqrt((float)n1);
n4 = (long)sqrt((float)n2);

4.判断n3和n4的平方是否同时满足等于n1和n2,如果满足条件就打印输出;

if ((n1 == n3 * n3) && (n2 == n4 * n4))
			{
				printf("%ld\t",i);
			}

 因为定义了长整型变量,因此在输出的时候应该使用%ld的格式进行输出;

 完整的程序运行:

#include<stdio.h>
#include<math.h>
int main(void)
{
	long i, n1, n2, n3, n4, n;
	printf("这些数有:\n");
	for (i = 100000; i <= 999999; i++)
	{
		n = (long)sqrt((float)i);
		if (i == n * n)
		{
			n1 = i / 1000;
			n2 = i % 1000;
			n3 = (long)sqrt((float)n1);
			n4 = (long)sqrt((float)n2);
			if ((n1 == n3 * n3) && (n2 == n4 * n4))
			{
				printf("%ld\t",i);
			}
		}
	}
	printf("\n");
}

运行结果:

 

当然这并不是唯一的方法,我也是一个小白,只是将自己每天学的一个知识分享到这个上面,可能会有些错误,希望各位大佬指正!

以下是对应的函数实现: 1、找出六位数中所有的一数平方数 ```python def find_square_number(): for i in range(100000, 1000000): count = 0 for j in range(1, int(i ** 0.5) + 1): if i % j == 0: if j == i // j: count += 1 else: count += 2 if count == 4: print(i) ``` 2、求出100以内的二维基本勾股数组 ```python def find_gougu_number(): for i in range(1, 101): for j in range(i, 101): for k in range(j, 101): if i ** 2 + j ** 2 == k ** 2: print(i, j, k) ``` 3、求四位的卡普列加数 ```python def kaprekar_number(): for i in range(1000, 10000): num = str(i) num_square = str(i ** 2) for j in range(1, len(num)): left = int(num_square[:j]) right = int(num_square[j:]) if left + right == i and right != 0: print(i) ``` 4、验证某正整数满足四个平方数和 ```python def verify_square_number(num): for i in range(int(num ** 0.5) + 1): for j in range(int(num ** 0.5) + 1): for k in range(int(num ** 0.5) + 1): for l in range(int(num ** 0.5) + 1): if i ** 2 + j ** 2 + k ** 2 + l ** 2 == num: return True return False ``` 5、将0,1,2,3,4,5,6,7,8,9这十个数字组成一个一位数,一个两位数,一个位数,一个四位数,使他们恰恰都是完全平方数,并按照角形排列 ```python import itertools def perfect_square(): nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] for p in itertools.permutations(nums): a = p[0] b = p[1] * 10 + p[2] c = p[3] * 100 + p[4] * 10 + p[5] d = p[6] * 1000 + p[7] * 100 + p[8] * 10 + p[9] if int(a ** 0.5) ** 2 == a and int(b ** 0.5) ** 2 == b and int(c ** 0.5) ** 2 == c and int(d ** 0.5) ** 2 == d: print(a) print(b, c) print(d) ``` 6、设计菜单函数,调用相关功能模块 ```python def menu(): while True: print("1. 找出六位数中所有的一数平方数") print("2. 求出100以内的二维基本勾股数组") print("3. 求四位的卡普列加数") print("4. 验证某正整数满足四个平方数和") print("5. 将0,1,2,3,4,5,6,7,8,9这十个数字组成一个一位数,一个两位数,一个位数,一个四位数,使他们恰恰都是完全平方数,并按照角形排列") print("0. 退出") choice = input("请输入选项:") if choice == '1': find_square_number() elif choice == '2': find_gougu_number() elif choice == '3': kaprekar_number() elif choice == '4': num = int(input("请输入正整数:")) if verify_square_number(num): print("该正整数满足四个平方数和") else: print("该正整数不满足四个平方数和") elif choice == '5': perfect_square() elif choice == '0': break else: print("输入错误,请重新输入!") ``` 以上代码可以组成一个完整的程序,供用户选择不同的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿彬想学编程_可惜不会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值