写一个函数,其功能是:在3位整数(100~999)中寻找既是完全平亏数(东个数的平
方),又有两位数字相同的整数,例和|44、676等,并依次从小到大存入数狙b中;满足该
条件的整数的个数通过所编制的函数返回。我运行结束后只显示了百位数和十位数没有个位数,请问是哪里出了问题?
#include<studio.h>
int main()
{
int n=100
for(n;n<=999;n++)
{
for(int m=1;n<=n;m++)
{
if(m*m==n)
{
int i=n%10;
int j=(n=/10)%/10;
int k=n/100;
if(i==j||i==k||j==k)
{
printf("%\b",n);
break;
}
}
}
}
}
修改如下,见注释,供参考:
#include<stdio.h>
int main()
{
int n = 100; // 修改 少了 ';' 分号
for (n; n <= 999; n++)
{
for (int m = 1; m < n; m++) //for (int m = 1; n <= n; m++) 修改
{
if (m * m == n)
{
int i = n % 10;
int j = (n / 10) % 10; //int j = (n = / 10) % / 10; 修改
int k = n / 100;
if (i == j || i == k || j == k)
{
printf("%d ", n); //printf("%\b",n); 修改
break;
}
}
}
}
return 0;
}
#include<stdio.h>
int main(int argc, const char *argv[])
{
char v = 0;
scanf("%c", &v);
getchar();
if (v >= 'A' && v <= 'Z'){
v += 32;
printf("%c\n", v);
}else if (v >= 'a' && v <= 'z'){
v -= 32;
printf("%c\n", v);
}else if (v >= '0' && v <= '9'){
v -= '0';
v *= 10;
printf("%d\n", v);
}else{
printf("%c\n", '#');
}
return 0;
}
#include <stdio.h>
#include <math.h>
// 判断是否满足条件
int testNumber(int num) {
int h = num / 100; // 百位
int t = num / 10 % 10; // 十位
int l = num % 10; // 个位
if (h == t || t == l || h == l) { // 两位相同
double tmp = sqrt(num);
if (tmp == floor(tmp)) { // 是完全平方数
return 1;
}
}
return 0;
}
// 寻找符合条件的整数
int searchNumber(int nums[]) {
int idx = 0;
for (int i = 100; i <= 999; i++) {
if (testNumber(i)) { // 符合条件
nums[idx] = i;
idx++;
}
}
return idx;
}
int main() {
int nums[500] = {0}; // 存储符合条件的整数
int count = searchNumber(nums);
for (int i = 0; i < count; i++) {
printf("%d ", nums[i]);
}
return 0;
}
问题可能出现在寻找符合条件的整数的函数中。本题中要求两位数字相同,但代码中判断的是两个位数是否相同,因此可能会将个位数相同的数字漏掉。可以修改判断条件为 if (h == t || t == l || h == l || t == h || l == h || l == t)
。此外,还要确保存储符合条件的整数的数组足够大,可以根据实际情况调整。
你这代码错误一大堆,你确认这东西能编译运行?
#include<stdio.h>
int main()
{
int n=100;
for(;n<=999;n++)
{
for(int m=1;m<=n;m++)
{
if(m*m==n)
{
int i=n%10;
int j=(n/10)%10;
int k=n/100;
if(i==j||i==k||j==k)
{
printf("%d ",n);
break;
}
}
}
}
}