浙江大学 PTA 习题10-1 判断满足条件的三位数 (15 分)

本文介绍了一个函数,用于统计指定区间内,具有两位相同数字的三位数完全平方数的数量,并提供了一个具体的实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本题要求实现一个函数,统计给定区间内的三位数中有两位数字相同的完全平方数(如144、676)的个数。

函数接口定义:

int search( int n );

其中传入的参数int n是一个三位数的正整数(最高位数字非0)。函数search返回[101, n]区间内所有满足条件的数的个数。

裁判测试程序样例:

#include <stdio.h>
#include <math.h>

int search( int n );

int main()
{
    int number;

    scanf("%d",&number);
    printf("count=%d\n",search(number));
		
    return 0;
}


/* 你的代码将被嵌在这里 */

输入样例:

500

输出样例:

count=6

我的代码

int search( int n )
{
	int i,x=0;
	for(i=101;i<=n;i++)
	if((int)sqrt(i)*(int)sqrt(i)==i)
	if(i%10==i/100||i%10==(i/10)%10||i/100==(i/10)%10)x++;
	return x;
}
### 查找满足特定条件的四位数 根据用户需求,可以设计一个通用框架来解决与 PTA 题目类似的“满足条件的四位数”的问题。以下是基于 C++ 的一种实现方式: #### 算法描述 为了找到满足某些条件的四位数,通常需要遍历所有的四位数(即从 1000 到 9999),并对每个数字逐一验证其是否符合条件。如果某个数字通过了测试,则将其记录下来。 假设我们需要寻找的是某种特殊性质的四位数(例如:能被某数值整除、各位数字之和等于某一固定值等)。可以通过如下方法完成此操作[^1]。 ```cpp #include <iostream> using namespace std; bool checkCondition(int number) { // 定义具体的判断逻辑 int digits[4]; for (int i = 3; i >= 0; --i) { digits[i] = number % 10; number /= 10; } // 假设条件为:最大数字减去最小数字的结果大于等于5 int maxDigit = *max_element(digits, digits + 4); int minDigit = *min_element(digits, digits + 4); return (maxDigit - minDigit) >= 5; } int main() { int count = 0; cout << "满足条件的四位数有:" << endl; for (int i = 1000; i <= 9999; ++i) { if (checkCondition(i)) { cout << i << " "; count++; } } cout << "\n总共有 " << count << " 个满足条件的四位数。" << endl; return 0; } ``` 以上代码定义了一个 `checkCondition` 函数用于检测给定数字是否符合指定条件,在本例中我们设定条件为:“该数的最大位数与其最小位数之间的差值不小于5”。当然可以根据实际题目调整这个函数中的具体判定标准[^1]。 #### Python 实现版本 同样也可以采用Python语言编写相应的解决方案: ```python def check_condition(number): str_num = f"{number:04d}" # 确保是四位数字符串形式 digit_list = [int(digit) for digit in str_num] max_digit = max(digit_list) min_digit = min(digit_list) return (max_digit - min_digit) >= 5 if __name__ == "__main__": result_numbers = [] for num in range(1000, 10000): if check_condition(num): result_numbers.append(num) print(f"满足条件的四位数有:{result_numbers}") print(f"总计数量:{len(result_numbers)}") ``` 这里提供了另一种编程风格下的解答方案,并且保持了一致性的思路——即先提取每一位上的数字并存储起来以便后续处理;接着依据预设规则筛选出合格的数据项[^1]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值