这是pta上的题,我的思路是先判断是不是完全平方数,然后将每一位数存入数组,判断是否有数字相同。上面这个程序我用m算出了位数当做数组的边界,结果把不符合的数也输出出来了
上面这个用终止符判断数组边界,没有多输出数但是不知道为什么少了一个400
【以下回答由 GPT 生成】
问题分析: 根据问题描述,我们可以将问题分为两个部分:判断一个数是否为完全平方数、将每一位存入数组并判断数组中是否有重复的数字。其中,你已经计算了数组的边界并输出了不符合条件的数,但结果中也有一些不符合条件的数被输出了。另外,你尝试用终止符来判断数组的边界,虽然避免了多余的输出,但却少了一个数值为400的情况。下面我将分别给出解决方案。
#include <stdio.h>
int isPerfectSquare(int num) {
for (int i = 1; i * i <= num; i++) {
if (i * i == num) {
return 1;
}
}
return 0;
}
int main() {
int num = 16; // 你可以将其改为其他的数进行测试
printf("%d\n", isPerfectSquare(num));
return 0;
}
#include <stdio.h>
int isDuplicate(int *arr, int size) {
for (int i = 0; i < size; i++) {
for (int j = i + 1; j < size; j++) {
if (arr[i] == arr[j]) {
return 1;
}
}
}
return 0;
}
int main() {
int num = 123456789; // 你可以将其改为其他的数进行测试
int digits[10]; // 数组的大小设置为10,因为我们只会存储0-9这几个数字
int count = 0;
while (num > 0) {
digits[count++] = num % 10; // 取余得到最低位的数字
num /= 10; // 将num除以10,使得num的最低位消失
}
if (isDuplicate(digits, count)) {
printf("数组中有重复的数字\n");
} else {
printf("数组中没有重复的数字\n");
}
return 0;
}
关于你提到的使用终止符来判断数组的边界,以及数值为400的情况没有被正确处理的问题,我无法确定你具体的实现细节。但一般来说,我们可以通过设置一个标记变量或者在数组最后添加一个特殊值来表示数组的边界,以避免多余的输出和丢失特定情况。具体的实现代码根据你的具体逻辑可能会有所不同。
希望以上解决方案对你有所帮助,如果你还有其他问题,请随时提问。
【相关推荐】