1. 题目 1977: 求中间数
题目描述:从键盘输入三个整数到变量a,b,c,输出其中中间大小的数。
(1)源程序清单如下。
#include<stdio.h>
int main()
{
int a,b,c,mid;
scanf("%d %d %d", &a,&b,&c);
if(a>b)
mid=(a>c)?((b>c)?b:c):a;
if(a<b)
mid=(b>c)?((a>c)?a:c):b;
printf("%d",mid);
return 0;
}
2. 题目 1011: [编程入门]最大公约数与最小公倍数
题目描述:输入两个正整数m和n,求其最大公约数和最小公倍数。
(1)源程序清单如下。
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
int a = m, b = n;
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
int gcd = a;
int lcm = m * n / gcd;
cout << gcd << " " << lcm << endl;
return 0;
}
3. 题目 1017: [编程入门]完数的判断
题目描述:一个数如果恰好等于不包含它本身所有因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子。
(1)源程序清单如下。
#include<stdio.h>
int main()
{
int N;
scanf("%d",&N);
int sum;
for(int i=1;i<=N;i++)
{
sum=0;
for(int j=1;j<=i/2;j++)
{
if(i%j==0)
{
sum=sum+j;
}
}
if(sum==i)
{
printf("%d its factors are 1",i);
for(int j=2;j<=i/2;j++)
{
if(i%j==0)
printf(" %d",j);
}
printf("\n");
}
}
return 0;
}
4. 题目 1021: [编程入门]迭代法求平方根
问题描述:用迭代法求 平方根,求a的平方根的迭代公式为: X[n+1]=(X[n]+a/X[n])/2 要求前后两次求出的差的绝对值少于0.00001。 输出保留3位小数。
(1)源程序清单如下。
#include<stdio.h>
#include<math.h>
int main()
{
double a,x0,x1;
scanf("%lf", &a);
x0=a;
x1=(x0+a/x0)/2;
while(fabs(x1-x0)>=1e-5){
x0=x1;
x1=(x0+a/x0)/2;
}
printf("%.3lf\n",x1);
return 0;
}
5. 题目 1018: [编程入门]有规律的数列求和
问题描述:有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。
(1)源程序清单如下。
#include<stdio.h>
int main()
{
int a=2,b=1;
int N=0;
int i=1;
double sum=0.0;
scanf("%d",&N);
while(i<=N)
{
sum+=(double)a/b;
int s1=a+b;
int s2=a;
a=s1;
b=s2;
i++;
}
printf("%.2f",sum);
return 0;
}
6. 题目 1022: [编程入门]筛选N以内的素数
问题描述:用简单素数筛选法求N以内的素数。
(1)源程序清单如下。
#include <stdio.h>
int main()
{
int N,i,j;
scanf("%d",&N);
for(i=2;i<=N;i++)
{
int is_prime = 1;
for(j=2;j*j<=i;j++)
{
if(i % j == 0)
{
is_prime = 0;
break;
}
}
if(is_prime)
{
printf("%d\n", i);
}
}
return 0;
}
1. 题目 1016: [编程入门]水仙花数判断
题目描述:其中每个汉字代表1个数字(0~9)。相同的汉字代表相同的数字,不同的汉字代表不同的数字。试编程确定使得整个算式成立的数字组合,如有多种情况,请给出所有可能的答案。(具体输入输出格式看网站)
(1)源程序清单如下。
#include <stdio.h>
#include <math.h>
int isNarcissistic(int num);
int main() {
int i;
for (i = 100; i < 1000; i++) {
if (isNarcissistic(i)) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
int isNarcissistic(int num) {
int originalNum = num;
int sum = 0;
while (num > 0) {
int digit = num % 10;
sum += pow(digit, 3);
num /= 10;
}
return sum == originalNum;
}
2. 题目 1136: C语言训练-求具有abcd=(ab+cd)2性质的四位数
3025这个数具有一种独特的性质:将它平分为二段,即30和25,使之相加后求平方,即(30+25)2,恰好等于3025本身。请求出具有这样性质的全部四位数。
(具体输入输出格式看网站)
(1)源程序清单如下。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
for(int i=1000;i<=9999;i++)
{
a=i/100;
b=i%100;
if(i==(a+b)*(a+b))
printf("%d ",i);
}
return 0;
}
3. 题目 1434: 蓝桥杯历届试题-回文数字
观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。
本题要求你找到一些5位或6位的十进制数字。满足如下要求:
该数字的各个数位之和等于输入的整数。(具体输入输出格式看网站)
(1)源程序清单如下。
#include<iostream>
using namespace std;
int main()
{
int n;int f=0;
cin>>n;
for(int i=10000;i<1000001;i++)
{
int i1=i,x=0;
int sum=0;
while(i1)
{
x=x*10+i1%10;
sum+=i1%10;
i1/=10;
}
if(x==i&&sum==n)
{cout<<i<<endl;f=1;}
}
if(f==0) cout<<-1;
return 0;
}
4. 题目 1615: 蓝桥杯算法训练VIP-友好数
有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的。例如:
9的约数和有:1+3=4
4的约数和有:1+2=3
所以9和4不是友好的。
220的约数和有:1 2 4 5 10 11 20 22 44 55 110=284
284的约数和有:1 2 4 71 142=220
所以220和284是友好的。
编写程序,判断两个数是否是友好数。(具体输入输出格式看网站)
(1)源程序清单如下。
#include<stdio.h>
int f(int a)
{
int i,sum=0;
for(i=1;i<=a/2;i++)
{
if(a%i==0)
sum+=i;
}
return sum;
}
int main()
{
int a,b;
scanf("%d %d",&a,&b);
if(f(a)==b&&f(b)==a)
printf("yes");
else
printf("no");
return 0;
}
5. 题目 1157: 亲和数
古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为:1+2+4+5+10+11+20+22+44+55+110=284。
而284的所有真约数为1、2、4、71、 142,加起来恰好为220。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。你的任务就编写一个程序,判断给定的两个数是否是亲和数。
(具体输入输出格式看网站)
(1)源程序清单如下。
#include<iostream>
using namespace std;
int main()
{
int n,a,b,i,j,s1,s2;
cin>>n;
while(n--)
{
cin>>a>>b;
s1=s2=0;
for(i=1;i<a;i++)
{
if(a%i==0)s1+=i;
}
for(j=1;j<b;j++)
{
if(b%j==0)s2+=j;
}
if(s1==b&&s2==a)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
6. 题目 1234: 检查一个数是否为质数
问题描述:输入一个正整数,检查该数是否为质数。(具体输入输出格式看网站)
(1)源程序清单如下。
#include <stdio.h>
int main() {
int a,sum=0;
scanf("%d",&a);
for(int i=2;i*i<=a;i++){
if(a<=0){
continue;
}
if(a%i==0){
sum++;
break;
}else{
continue;
}}
if(sum==0){
printf("Y");
}else{printf("N");}
return 0;
}
1. 下列乘法算式中:赛软件 * 比赛 = 软件比拼
其中每个汉字代表1个数字(0~9)。相同的汉字代表相同的数字,不同的汉字代表不同的数字。试编程确定使得整个算式成立的数字组合,如有多种情况,请给出所有可能的答案。
(1)源程序清单如下。
#include<stdio.h>
int main()
{
int a,b,c,d,e;
int x,y,z;
for(a=1;a<9;a++)
for(b=1;b<9;b++)
for(c=0;c<9;c++)
for(d=1;d<9;d++)
for(e=0;e<9;e++){
x=a*100+b*10+c;
y=d*10+a;
z=b*1000+c*100+d*10+e;
if(x*y==z)
printf("%d*%d=%d\n",x,y,z);
}
return 0;
}
2. 古堡算式:福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:
ABCDE * ? = EDCBA
他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。请你利用计算机的优势,找到破解的答案。把 ABCDE 所代表的数字写出来。
(1)源程序清单如下。
#include<stdio.h>
int main()
{
int a,b,c,d,e;
int x,y,z;
for(a=1;a<9;a++)
for(b=1;b<9;b++)
for(c=0;c<9;c++)
for(d=1;d<9;d++)
for(e=0;e<9;e++){
x=a*100+b*10+c;
y=d*10+a;
z=b*1000+c*100+d*10+e;
if(x*y==z)
printf("%d*%d=%d\n",x,y,z);
}
return 0;
}
3. 马虎的算式:
小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是:36 x 495 = ? 他却给抄成了:396 x 45 = ?
但结果却很戏剧性,他的答案竟然是对的!!因为 36 * 495 = 396 * 45 = 17820
类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54。假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
(1)源程序清单如下。
#include <stdio.h>
int main() {
int a, b, c, d, e,x,y;
for (a = 1; a <= 9; a++)
for (b = 1; b <= 9; b++)
for (c = 1; c <= 9; c++)
for (d = 1; d <= 9; d++)
for (e = 1; e <= 9; e++) {
x=(a*10+b)*(c*100+d*10+e);
y=(a*100+d*10+b)*(c*10+e);
if (x == y&&
a!=b&&a!=c&&a!=d&&a!=e&&
b!=c&&b!=d&&b!=e&&
c!=d&&c!=e&&
d!=e) {
printf("%d%d * %d%d%d = %d%d%d * %d%d = %d\n",
a, b, c, d, e, a, d, b, c, e, x);
}
}
return 0;
}
4. 三羊献瑞
观察下面的加法算式:
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。请你填写“三羊献瑞”所代表的4位数字。
(1)源程序清单如下。
#include <stdio.h>
int main() {
int xiang, rui, sheng, hui, san, yang, xian, qi;
int num1, num2, sum;
for(xiang=1;xiang<=9;xiang++)
for(rui=0;rui<=9;rui++) {
if(rui==xiang)continue;
for(sheng=0;sheng<= 9;sheng++){
if(sheng==xiang||sheng==rui)continue;
for(hui=0;hui<=9;hui++){
if(hui==xiang||hui==rui||hui==sheng)continue;
for(san=1; san<=9;san++) {
if(san==xiang||san==rui||san==sheng||san==hui)continue;
for(yang=0;yang<=9;yang++){
if(yang==xiang||yang==rui||yang==sheng||yang==hui||yang==san)continue;
for(xian=0;xian<=9;xian++){
if(xian==xiang||xian==rui||xian==sheng||xian ==hui||xian==san||xian==yang)continue;
for(qi=0;qi<=9;qi++){
if(qi==xiang||qi==rui||qi==sheng||qi==hui||qi==san||qi==yang||qi==xian)continue;
num1=xiang*1000+rui*100+sheng*10+hui;
num2=san*1000+yang*100+xian*10+rui;
sum=san*10000+yang*1000+sheng*100+rui*10+qi;
if (num1+num2==sum) {
printf("祥=%d,瑞=%d,生=%d,辉=%d\n",xiang,rui,sheng,hui);
printf("三=%d,羊=%d,献=%d,气=%d\n",san,yang,xian,qi);
printf("祥瑞生辉(%d)+三羊献瑞(%d)=三羊生瑞气(%d)\n",num1,num2,sum);
printf("\n三羊献瑞=%d%d%d%d\n",san,yang,xian,rui);
return 0;
}
}
}
}
}
}
}
}
printf("未找到解\n");
return 0;
}
5. 立方和问题。
问题描述:考虑方程式:a^3 + b^3 = c^3 + d^3
其中:“^”表示乘方。a、b、c、d是互不相同的小于30的正整数。这个方程有很多解。比如:a = 1,b=12,c=9,d=10 就是一个解。因为:1的立方加12的立方等于1729,而9的立方加10的立方也等于1729。
当然,a=12,b=1,c=9,d=10 显然也是解。
如果不计abcd交换次序的情况,这算同一个解。
请编写程序实现如下任务:找到所有小于30的不同的正整数解。把a b c d按从小到大排列,用逗号分隔,每个解占用1行。比如,刚才的解输出为:1,9,10,12 不同解间的顺序可以不考虑。
(1)源程序清单如下。
#include <stdio.h>
int main() {
int a, b, c, d, t;
for (a = 1; a < 30; a++)
for (b = a + 1; b < 30; b++)
for (c = a + 1; c < b; c++)
for (d = c + 1; d < 30; d++) {
if (d == b) continue;
if (a*a*a + b*b*b != c*c*c + d*d*d) continue;
if (b < c) printf("%d,%d,%d,%d\n", a, b, c, d);
else if (b > d) printf("%d,%d,%d,%d\n", a, c, d, b);
else printf("%d,%d,%d,%d\n", a, c, b, d);
}
return 0;
}
6. 类似625的数字
625这个数字很特别,625的平方等于390625,刚好其末3位是625本身。除了625,还有其它的3位数有这个特征吗?
请编写程序,寻找所有这样的3位数:它的平方的末3位是这个数字本身。
(1)源程序清单如下。
#include<stdio.h>
int main()
{
int a;
for(a=100;a<1000;a++){
if(a==a*a%1000){
printf("%d\n",a);
}
}
return 0;
}
1.题目A
描述:输入10个整数,求它们的平均值,并输出大于平均值的数据的个数。(具体输入输出格式看网站)
(1)程序清单如下。
#include<stdio.h>
int main()
{
int a[10],b=0,sum=0;
for(int i=0;i<10;i++){
scanf("%d",&a[i]);
sum=sum+a[i];
}
double ave=(double)sum/10;
for(int i=0;i<10;i++){
if(ave<a[i]){
b++;
}
}
printf("%d",b);
return 0;
}
2.题目B
描述:这是一个很经典的题,给定一个日期,输出这个日期是该年的第几天。(具体输入输出格式看网站)
(1)程序清单如下。
#include<stdio.h>
int main()
{
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int y,m,d,sum=0;
while(scanf("%d/%d/%d",&y,&m,&d)!=EOF)
{
sum=0;
for(int i=1;i<m;i++)
sum=sum+month[i];
sum=sum+d;
if(m>2 && (y%4==0 && y%100!=0 || y%400==0))
sum++;
printf("%d\n",sum);
}
return 0;
}
3.题目C
描述:输入10个数,找出其中绝对值最小的数,将它和最后一个数交换,然后输出这10个数。(具体输入输出格式看网站)
(1)程序清单如下。
#include <stdio.h>
#include <stdlib.h>
int main() {
int a[10], min= 0;
for (int i = 0; i < 10; i++) {
scanf("%d", &a[i]);
if (abs(a[i]) < abs(a[min])) {
min= i;
}
}
int t= a[min];
a[min] = a[9];
a[9] = t;
for (int i = 0; i < 10; i++) {
printf("%d ", a[i]);
}
return 0;
}
4. 题目D
描述:已有一个已正序排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中。(具体输入输出格式看网站)
(1)程序清单如下。
#include <stdio.h>
int main() {
int a[10], x, i, b;
for (i = 0; i < 9; i++) {
scanf("%d", &a[i]);
}
scanf("%d", &x);
for (b= 8; b>= 0 && a[b] > x;b--) {
a[b+ 1] = a[b];
}
a[b+ 1] = x;
for (i = 0; i < 10; i++) {
printf("%d\n", a[i]);
}
return 0;
}
5.题目E
描述:回文串是从左到右或者从右到左读起来都一样的字符串,试编程判别一个字符串是否为回文串。(具体输入输出格式看网站)
(1)程序清单如下。
#include <stdio.h>
#include <string.h>
int main() {
char s[255];
int i, j, x;
gets(s);
x= strlen(s);
for (i = 0, j = x - 1; i < j; i++, j--) {
if (s[i] != s[j]) {
printf("N");
return 0;
}
}
printf("Y");
return 0;
}
6. 题目F
描述:字符串处理在计算机中有很多复杂的操作,但是这些复杂的操作都是由基本的字符串操作复合而成,要求编写一字符串颠倒的程序,把字符串中的字符颠倒位置。(具体输入输出格式看网站)
(1)程序清单如下。
#include <stdio.h>
int main(){
int N,a[10][10],sum = 0;
scanf("%d", &N);
for (int i=0;i<N;i++)
for(int j=0;j<N; j++)
scanf("%d", &a[i][j]);
for (int i=0; i<N;i++) {
sum += a[i][i];
sum += a[i][N-1-i];
}
if (N%2 == 1)
sum -= a[N/2][N/2];
printf("%d", sum);
return 0;
}
1. 题目A
描述输入一个正整数n (1≤ n ≤20),再输入一个n 行n列的矩阵,找出该矩阵中绝对值最大的元素以及它的行下标和列下标。(具体输入输出格式看网站)
(1)程序清单如下。
#include<stdio.h>
#include<math.h>
int main()
{
int a[20][20];
int i,j,n,max,maxi,maxj;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
max=a[0][0];maxi=0;maxj=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(abs(a[i][j])>abs(max))
{
max=a[i][j];
maxi=i;
maxj=j;
}
}
printf("%d %d %d",max,maxi+1,maxj+1);
return 0;
}
2.题目B
描述:编写一个程序输入一个m*n的矩阵存储并输出,并且求出每行的最大值和每行的总和。
要求把每行总和放入每行最大值的位置,如果有多个最大值,取下标值最小的那一个作为最大值。最后将结果矩阵输出。(具体输入输出格式看网站)
(1)程序清单如下。
#include <stdio.h>
int main() {
int m, n,maxi,maxj,sum;
int a[100][100];
while (scanf("%d %d",&m,&n)==2) {
for (int i=0; i<m;i++) {
for (int j=0;j<n;j++) {
scanf("%d",&a[i][j]);
}
}
for (int i = 0; i < m; i++) {
maxi=a[i][0];
maxj=0;
sum=a[i][0];
for (int j=1;j<n;j++) {
sum+=a[i][j];
if (a[i][j]>maxi) {
maxi=a[i][j];
maxj=j;
}
}
a[i][maxj]=sum;
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
printf("%d", a[i][j]);
if (j < n - 1) {
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
3.题目C
描述:输入一个N维矩阵,判断是否对称。(具体输入输出格式看网站)
(1)程序清单如下。
#include <stdio.h>
int main() {
int n,x[100][100];
while (scanf("%d", &n) == 1) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &x[i][j]);
}
}
int y= 1;
for (int i = 0; i < n &&y; i++) {
for (int j = i + 1; j < n; j++) {
if (x[i][j] != x[j][i]) {
y= 0;
break;
}
}
}
if (y) {
printf("Yes!\n");
} else {
printf("No!\n");
}
}
return 0;
}
4.题目D
描述:给定一个n×m矩阵相乘,求它的转置。其中1≤n≤20,1≤m≤20,矩阵中的每个元素都在整数类型(4字节)的表示范围内。(具体输入输出格式看网站)
(1)程序清单如下。
#include<stdio.h>
int main()
{
int n,m,i,j,x[20][20],y[20][20];
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
for(j=0;j<m;j++){
scanf("%d",&x[i][j]);
}
for(i=0;i<n;i++){
for(j=0;j<m;j++)
y[j][i]=x[i][j];
}
for(i=0;i<m;i++){
for(j=0;j<n;j++){
printf("%d",y[i][j]);
if(j<n-1)
printf(" ");
}
printf("\n");
}
return 0;
}
5. 题目E
描述:读入一些字符串,将其中的空格去掉。(具体输入输出格式看网站)
(1)程序清单如下。
#include <stdio.h>
int main() {
char x;
while (scanf("%c", &x) == 1) {
if (x!= ' ') {
printf("%c", x);
}
}
return 0;
}
6.题目F
描述:输入一串仅包含 'A' - 'Z'的字符串, 用下面的方法进行重新编码:
(1) 若子串包含连续k个相同的字符,则改为kX; 其中X为这个子串中唯一的字符.
(2) 如果子串中字符仅为1个时, 则前面的'1'则省去.(具体输入输出格式看网站)
(1)程序清单如下。
#include <stdio.h>
int main() {
int n;
char x[10001];
scanf("%d", &n);
while (n--) {
scanf("%s", x);
int i = 0;
while (x[i] != '\0') {
char a= x[i];
int b= 0;
while (x[i] == a) {
b++;
i++;
}
if (b== 1) {
printf("%c", a);
} else {
printf("%d%c", b, a);
}
}
printf("\n");
}
return 0;
}
7.题目F
描述:若一个数(首位不为0)从左到右读与从右到左读都是一样,这个数就叫做回文数,例如12521就是一个回文数。
给定一个正整数,把它的每一个位上的数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。给定的数本身不为回文数。
例如:87则有:
STEP1: 87+78=165
STEP2: 165+561=726
STEP3: 726+627=1353
STEP4: 1353+3531=4884
编写一个程序,输入M(12<=M<=100),输出最少经过几步可以得到回文数。如果在8步以内(含8步)不可能得到回文数,则输出0。(具体输入输出格式看网站)
(1)程序清单如下。
#include <stdio.h>
int main() {
int l, m;
scanf("%d", &l);
while (l--) {
scanf("%d", &m);
int a = 0;
int b = m;
int c = 0;
while (a < 8) {
int d = 0;
int e = b;
while (e > 0) {
d = d * 10 + e % 10;
e /= 10;
}
b = b + d;
a++;
e = b;
d = 0;
while (e > 0) {
d = d * 10 + e % 10;
e /= 10;
}
if (b == d) {
c = 1;
break;
}
}
if (c) {
printf("%d\n", a);
} else {
printf("0\n");
}
}
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复