#include<stdio.h> #include<math.h> intIsTheNumber( constint N ); intmain() { int n1, n2, i, cnt; scanf("%d %d", &n1, &n2);//输入两个数字,统计这两个数字之间符合要求的数字 cnt = 0; for ( i=n1; i<=n2; i++ ) { if ( IsTheNumber(i) ) cnt++; } printf("cnt = %d\n", cnt); return0; } /* 你的代码将被嵌在这里 */ intIsTheNumber( constint N ) { int n = N; int perfect_square = 0;//是否是完全平方数 int same = 0;//是否有2个数字相同 //先看看这个数是不是完全平方数 for (int i = 0; i*i <= n; i++) { if ( i * i == N) { perfect_square = 1; break; } } //得到数字的长度,看看是几位数 int length = 0;//数字的长度 while (n > 0) { length++; n = n / 10; } n = N; int input[5];//这个字符串用来存储输入的数字,因为输入是int型,5位已经足够 for (int i = 0; i < length; i++) { int temp = n % 10;//得到这个数字的个位 input[i] = temp; n = n / 10;//把这个数字的个位去掉 } //判断这个数字是否有2个相同数字 if (input[0]==input[1]||input[0]==input[2]||input[0]==input[3]||input[0]==input[4]|| input[1]==input[2]||input[1]==input[3]||input[1]==input[4]|| input[2]==input[3]||input[2]==input[4]|| input[3]==input[4]) { same = 1; } //如果两个都符合,返回1,否则返回0 if (same == 1 && perfect_square == 1) { return1; }else{ return0; } }
改进的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
intIsTheNumber( constint N ) { int n = N; // 判断是否完全平方数 (优化版) int root = (int)sqrt(N); if(root * root != N) return0; // 数字频率统计 int digitCount[10] = {0}; // 0-9的数字计数器 while(n > 0) { int digit = n % 10; digitCount[digit]++; if(digitCount[digit] >= 2) return1; // 发现重复立即返回 n /= 10; } return0; }
1 2 3
int root = (int)sqrt(N); if(root * root != N) return0;