#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;
#include<stdio.h> #include<stdlib.h> typedefstructNode *PtrToNode;//这句的意思是把指向Node这个结构体的指针起名叫PtrToNode structNode { int Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; typedef PtrToNode List; /* 定义单链表类型 */ intFactorialSum( List L ); intmain() { int N, i; List L, p; scanf("%d", &N); L = NULL;//这是表头指针L,初始时为NULL表明链表为空 for ( i=0; i<N; i++ ) { p = (List)malloc(sizeof(struct Node)); scanf("%d", &p->Data); p->Next = L; L = p; } printf("%d\n", FactorialSum(L)); return0; } /* 你的代码将被嵌在这里 */ intFactorial(int n)//求阶乘 { if( n == 0 || n == 1 ) { return1; }else{ int sum = 1; for (int i = 1; i <= n; i++) { sum = sum * i; } return sum; } } intFactorialSum( List L ) { int sum = 0; int temp = 0;//暂时存一下一个数字的阶乘 while (L != NULL) { temp = Factorial(L->Data);//得到这一次循环的阶乘 sum = sum + temp; L = L->Next; } return sum; }
#include<stdio.h> intmain() { int y = 0; int f = 0; int n = 0; int found = 0;//找到解标志 scanf("%d",&n); for (f=1; f<100; f++) { for (y=0; y<=99; y++) { if (98*f-199*y==n) { found = 1; break;//找到了解,退出内层循环 } } if (found)//退出外层循环 { break; } } if (found) { printf("%d.%d",y,f);//打印 }else { printf("No Solution");//没有解 } }
#include<stdio.h> doublefactorial(int n);//计算阶乘 intmain() { float threshold = 0;//阈值 float input = 0;//输入 float sum = 0;//结果 float numerator = 0;//分子 float denominator = 1;//分母 scanf("%f",&input); int i = 1; do { int x = 1; int j = 1;//计算分母循环用 for (j = 1; j<=i;j++)//计算分母 { denominator = denominator * x; x = x + 2; } numerator = factorial(i-1);//计算分子 threshold = numerator/denominator;//计算阈值(当前的最后一项) sum = sum + threshold;//计算和 i++; denominator = 1; } while (threshold > input); sum = sum * 2; printf("%.6f",sum); } doublefactorial(int n)//计算阶乘 { double result = 1; int i = 0; for (i = 1; i <= n; i++) { result = result * i; } return result; }
#include<stdio.h> #include<string.h> voiditob(int n,char s[],int b); voidReverse(char R[]); intmain() { int n = 3770; char s[100] = {0}; int b = 16; itob(n,s,b); return0; } voiditob(int n,char s[],int b) { int i = 0; for (i=0; n != 0; i++) { int j = n % b; if (j<10)//小于十进制的时候,用数字就够了 { s[i] = j+'0'; n = n / b; } elseif (j<16)//适用于16进制时,还要用到字母 { s[i] = j+'a'-10; n = n / b; } } Reverse(s);//翻转字符串 } voidReverse(char R[]) { int c,i,j; for (i=0,j=strlen(R)-1; i<j; i++,j--) { c = R[i]; R[i] = R[j]; R[j] = c; } }