码蹄集网站地址:https://www.matiji.net/exam/ojquestionlist
目录
MT1281 N的M次方
(1)题目
输入正整数N(<1500),首先计算其逆序数M(比如12逆序后是21)。然后输出N的M次方的最后3位数。
格式
输入格式: 输入正整数N 输出格式: 输出整型
样例1
输入格式: 12 输出格式: 122
(2)参考代码
#include<stdio.h> int main() { int N; scanf("%d", &N); int temp = N, M = 0; while (temp) { M = 10 * M + temp % 10; temp /= 10; } temp = N; N = 1; for (int i=1;i<=M;i++) { N = (N * temp) % 1000; } printf("%d", N); return 0; }
MT1282 Disarium数
(1)题目
一个自然数,如果每一位数的位数次幂之和等于该自然数,则称之为Disarium数。
比如:89=8+9 * 9。或者135 = 1 + 3 * 3 + 5 * 5 * 5
输入一个正整数n,检查它是否为Disarium数,是则输出YES否则输出NO。不考虑0,负数或者其他特殊情况。
格式
输入格式: 输入为整型 输出格式: 是则输出YES否则输出NO
样例1
输入: 175 输出: YES
(2)参考代码
#include<stdio.h> #include<math.h> int main() { int N, count = 0, sum = 0; scanf("%d", &N); int temp = N; while (temp) { temp /= 10; count++; } temp = N; for (int i=count;i>0;i--) { sum += pow(temp % 10, (double)i); temp /= 10; } if (sum == N) { printf("YES"); } else { printf("NO"); } return 0; }
MT1283 区间Disarium数
(1)题目
一个自然数,如果每一位数的位数次幂之和等于该自然数,则称之为Disarium数。
比如:89=8+99。或者135 = 1 +3 3 +5* 5* 5
输入整数区间,输出区间(含边界)内所有的Disarium数。不考虑0,负数或者其他特殊情况。
格式
输入格式: 输入为整型,空格分隔 输出格式: 输出为整型,空格分隔
样例1
输入格式: 1 100 输出格式: 1 2 3 4 5 6 7 8 9 89
(2)参考代码
#include<stdio.h> #include<math.h> int main() { int a, b, temp, count, Disarium; scanf("%d %d", &a, &b); for (int i=a;i<=b;i++) { temp = i; Disarium = 0; count = 0; while (temp) { temp /= 10; count++; } temp = i; for (int j=count;j>0;j--) { Disarium += pow((double)(temp % 10), (double)j); temp /= 10; } if (Disarium == i) { printf("%d ", Disarium); } } return 0; }
MT1284 快乐数
(1)题目
判断一个正整数是否是快乐数字,如果一个数字能够通过有限次快乐变换成为1,则是快乐数字。
快乐变换是对一个数字的每一位的平方数求和。例如:对于68 =6 6+88=100,
100 = 1* 1+0* 0+0*0= 1,因此68是快乐数字。输入一个正整数n,检查它是否为快乐数,是则输出YES否则输出NO。不考虑0,负数或者其他特殊情况。
格式
输入格式: 输入为整型 输出格式: 是则输出YES,否则输出NO
样例1
输入格式: 19 输出格式: YES
(2)参考代码
#include<stdio.h> #include<math.h> int main() { int n, temp, sum; scanf("%d", &n); while (1) { sum = 0; if (n == 1) { printf("YES"); break; } else if (n == 4) { printf("NO"); break; } while (n) { temp = n % 10; n /= 10; sum += pow((double)temp, 2.0); } n = sum; } return 0; }
MT1285 忠实数
(1)题目
如果一个数是7的幂,或者能分解成7的不同幂的和,那么这个数就叫做忠实数。 例如49=49,8=1+7, 57=1+7+49。注意1可以看成7的0次方。输入正整数N,判断它是不是忠实数,输出YES或者NO。
格式
输入格式: 输入正整数N 输出格式: 输出YES或者NO
样例1
输入: 2457 输出: YES
备注
N 属于正常int范围
(2)参考代码
#include<stdio.h> int main() { int N; scanf("%d", &N); // if (N % 7 == 0 && N != 0) // { // printf("YES"); // } // else if (N % 7 == 1) // { // printf("YES"); // } // else // { // printf("NO"); // } while (N / 7) { if (N % 7 == 0) { N /= 7; } else if (N % 7 == 1) { N = (N - 1) / 7; } else { printf("NO"); return 0; } } if (N == 1) { printf("YES"); } else { printf("NO"); } return 0; }
MT1286 忠实数序列
(1)题目
如果一个数是7的幂,或者能分解成7的不同幂的和,那么这个数就叫做忠实数。 例如49=49,8=1+7, 57=1+7+49。注意1可以看成7的0次方。对忠实数进行从小到大排序得到的序列是1 7 8 49 50…等等。
输入正整数N,找到第N个忠实的数字。
格式
输入格式: 输入正整数N(N<1000) 输出格式: 输出整型
样例1
输入: 7 复制 输出: 57
(2)参考代码
#include<stdio.h> int main() { int N; scanf("%d", &N); int i = 0, temp; while (N) { i++; temp = i; while (temp / 7) { if (temp % 7 == 0) { temp /= 7; } else if (temp % 7 == 1) { temp = (temp - 1) / 7; } else { break; } } if (temp == 1) { N--; } } printf("%d", i); return 0; }
MT1287 ASCII值
(1)题目
输入一个长度为5的数组,数组元素均在0到9之间,请编写一个函数,把奇数项元素的值加上65,偶数项元素值加上97,把新元素的值看成是ASCII值,依次输出他们对应的字符,空格分隔。
格式
输入格式: 输入为整型,空格分隔 输出格式: 输出字符,空格分隔
样例1
输入: 0 1 2 3 4 输出: a B c D e
(2)参考代码
#include<stdio.h> int ASCII(int num, int i) { if (i % 2 == 0) { num += 97; } else { num += 65; } return num; } int main() { int a[5]; for (int i=0;i<5;i++) { scanf("%d", &a[i]); } for (int i=0;i<5;i++) { printf("%c ", (char)ASCII(a[i], i)); } return 0; }
MT1288 谁在说谎
(1)题目
张三说李四在说谎,李四说王五在说谎,王五说张三和李四都在说谎。编写程序判断这三人中到底谁说的是真话,谁说的是假话?
格式
输入格式: 无 输出格式: 输出他们是否说谎,如样例所示。其中说谎用“told a lie”,没说谎用的是“told the truth"
样例1
输入格式: 无 输出格式: zs told the truth. ls told a lie. ww told a lie.
(2)参考代码
#include<stdio.h> int main() { for (int x=0;x<=1;x++) { for (int y=0;y<=1;y++) { for (int z=0;z<=1;z++) { if (((x&&!y) || (!x&&y)) && ((y&&!z) || (!y&&z)) && ((z && !x && !y) || (!z && (x+y) != 0))) { printf("zs told %s.\n", x?"the truth":"a lie"); printf("ls told %s.\n", y?"the truth":"a lie"); printf("ww told %s.\n", z?"the truth":"a lie"); } } } } return 0; }
MT1289 调和级数不等式
(1)题目
有一个调和级数不等式11<1+1/2+1/3+…+1/m<12,求满足此不等式的m,m可能有多个,输出最小的一个。
格式
输入格式: 无 输出格式: 输出为整型
样例1
输入: 无 输出: 33617
(2)参考代码
#include<stdio.h> int main() { double sum = 0; for (int i=1;;i++) { sum += (1.0 / (double)i); if (sum > 11) { printf("%d", i); return 0; } } return 0; }
MT1290 级数
(1)题目
编写程序求级数前n项的和,其中n从键盘上输入
格式
输入格式: 输入为整型 输出格式: 输出为实型
样例1
输入: 1 输出: 0.400000
(2)参考代码
#include<stdio.h> #include<math.h> int main() { int n; scanf("%d", &n); double sum = 0; for (int i = 1; i <= n; i++) { sum += (pow(-1.0, (double)(i - 1)) * pow(2.0, (double)i)) / ((pow(2.0, (double)i) + pow(-1.0, (double)i)) * (pow(2.0, (double)(i + 1)) + pow(-1.0, (double)(i + 1)))); } printf("%lf", sum); return 0; }
MT1291 级数II
(1)题目
编写程序求级数前n项的和,其中n从键盘上输入
格式
输入格式: 输入为整型 输出格式: 输出为实型
样例1
输入: 1 输出: 0.230769
(2)参考代码
MT1292 某级数
(1)题目
某级数的前两项A(1)=1、A(2)=1,以后各项有如下关系:A(n)=A(n-2)+2A(n-1)。求依次对于整数M=100、1000和10000求出对应的n值,使其满足:S(n)<M且S(n+1)≥M。这里S(n)=A(1)+A(2)+…+A(n)。
格式
输入格式: 无 输出格式: 输出为整型,空格分隔
样例1
输入格式: 无 输出格式: 6 9 11
(2)参考代码
#include<stdio.h> int main() { int A[100] = {1, 1}, S[100] = {1, 2}; for (int i=2;;i++) { A[i] = A[i-2] + 2 * A[i - 1]; S[i] = S[i - 1] + A[i]; if (S[i-1] < 100 && S[i] >= 100) { printf("%d ", i); } else if (S[i-1] < 1000 && S[i] >= 1000) { printf("%d ", i); } else if (S[i] >= 10000) { printf("%d", i); break; } } return 0; }
MT1293 字母统计
(1)题目
请编写一个简单程序,从键盘输入一行字符,直到输入回车时结束。统计其中的字母个数。
格式
输入格式: 输入字符型 输出格式: 输出整型
样例1
输入格式: I have 3 cats. 输出格式: 9
(2)参考代码
#include<stdio.h> int main() { char c; int count = 0; while ((c = getchar()) != '\n') { if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) { count++; } } printf("%d", count); return 0; }
MT1294 从指定位置复制
(1)题目
输入整行字符串(中间可能会有空格),将此字符串从第n个字符(从0开始计数)开始的全部字符复制成为另一个字符串并输出。不考虑不合理的输入等特殊情况。
格式
输入格式: 第一行输入字符串,第二行输入n,整型 输出格式: 输出字符串
样例1
输入: sfdags 3 输出: ags
样例2
输入: Hello world 2 输出: llo world
(2)参考代码
#include<stdio.h> #include<string.h> int main() { char a[100]; gets(a); int n; scanf("\n%d", &n); for (int i=0;i<strlen(a);i++) { if (i >= n) { printf("%c", a[i]); } } return 0; }
MT1295 指定位置插串
(1)题目
存在两个字符串,实现在字符串s1中的指定位置n处(从0开始计数)插入字符串s2。若n大于s1的长度,则从s1末尾处接上s2字符串。
格式
输入格式: 第一行输入字符串s1,第二行输入正整数n,第三行输入字符串s2 输出格式: 输出字符串s1
样例1
输入: Wendy c++ 6 hate 输出: Wendy hate c++
(2)参考代码
MT1296 字符串替换
(1)题目
编写一个函数,把字符串中所有的you替换为we并输出。
格式
输入格式: 输入字符串 输出格式: 输出字符串
样例1
输入格式: you are the best 输出格式: we are the best
(2)参考代码
MT1297 位运算符
(1)题目
使用位运算符检查n以内的奇数和偶数,n的值由键盘输入
格式
输入格式: 输入正整数n(<100) 输出格式: 分行输出
样例1
输入格式: 5 输出格式: 0 is even 1 is odd 2 is even 3 is odd 4 is even 5 is odd
(2)参考代码
#include<stdio.h> int main() { int n; scanf("%d", &n); for (int i=0;i<=n;i++) { if (i & 1) { printf("%d is odd\n", i); } else { printf("%d is even\n", i); } } return 0; }
MT1298 小码哥的烦恼
(1)题目
小码哥抱怨说:“我才发现,C语言里面居然没有二进制的输出格式符,唉,谁能帮我写个函数,实在这个功能啊?”
格式
输入格式: 输入一个十进制正整数 输出格式: 输出对应的二进制
样例1
输入: 9 输出: 1001
(2)参考代码
#include<stdio.h> void Bin(int num) { if (num / 2) { Bin(num / 2); } printf("%d", num % 2); } int main() { int n; scanf("%d", &n); Bin(n); return 0; }
MT1299 二进制
(1)题目
输入5个正整数,将他们转换成二进制输出。
格式
输入格式: 输入整型,空格分隔。 输出格式: 输出整型,每个一行。从低位往高位看,每四位空一位。
样例1
输入: 8 89 4 14 51 输出: 1000 101 1001 100 1110 11 0011
(2)参考代码
#include<stdio.h> int main() { for (int i=0;i<5;i++) { int n, b[100], count = 0; scanf("%d", &n); while (n) { b[count++] = n % 2; n /= 2; } while (count) { if ((count - 1) % 4 == 0) { printf("%d ", b[--count]); } else { printf("%d", b[--count]); } } printf("\n"); } return 0; }
MT1300 奇数校验
(1)题目
输入一个整数N,求其奇偶性。一个数字的奇偶性是指它对应二进制包含的1位的数量。如果该数字包含奇数个1,则该数字具有“奇校验”ODD;如果该数字包含偶数个1,则该数字具有“偶校验”EVEN。比如13,其二进制形式是1101,包含3个1,所以是奇校验。
格式
输入格式: 输入为整型 输出格式: 输出为〇DD或者EVEN
样例1
输入格式: 9 输出格式: EVEN
(2)参考代码
#include<stdio.h> int main() { int n, N[100], count = 0; scanf("%d", &n); int count1 = 0, count0 = 0; while (n) { N[count++] = n % 2; n /= 2; } for (int i=0;i<=count;i++) { if (N[i] == 1) { count1++; } } if (count1 % 2 == 1) { printf("ODD"); } else { printf("EVEN"); } return 0; }