当前位置: 首页 > news >正文

PTA - C语言国庆题集1

目录

  • 7-1 阶梯电价
  • 7-2 求矩阵的最大值(设惟一)
  • 7-3 换硬币(鸡兔同笼)
  • 7-4 逆序输出一个整数的各位数字
  • 7-5 交换最小值
  • 7-6 分段函数2
  • 7-7 数组中能被5整除的数的和
  • 7-8 统计字母出现的次数(hash思想)
  • 7-9 字母三角形
  • 7-10 简单求阶乘问题
  • 7-11 矩阵转置
  • 7-12 输出所有大于平均值的数
  • 7-13 输出前n个英文大写字母
  • 7-14 删除字符串中指定字符(字符串读取)
  • 7-15 特殊a串数列求和
  • 7-16 分段函数求值
  • 7-17 二维数组处理(一)
  • 7-18 数字金字塔(打印图形)
  • 7-19 二维数组处理(二)
  • 7-20 字符转换

7-1 阶梯电价

为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。

输入格式:
输入在一行中给出某用户的月用电量(单位:千瓦时)。

输出格式:
在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”;若用电量小于0,则输出"Invalid Value!"。

输入样例1:

10

输出样例1:

cost = 5.30

输入样例2:

100

输出样例2:

cost = 55.50
#include <stdio.h>int main(){int use;scanf("%d",&use);double ans=0;if(use<0) {printf("Invalid Value!\n");return 0;}else if(use<=50) {ans=use*0.53;}else ans=50*0.53+(use-50)*(0.53+0.05);printf("cost = %.2f",ans);return 0;
}

7-2 求矩阵的最大值(设惟一)

本题要求编写程序,求一个给定的m×n矩阵的最大值以及位置。题目保证最大值惟一。

输入格式:
输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间以空格分隔。

输出格式:
输出在第一行中输出最大值,在第二行中按照“行下标 列下标”(下标从0开始)的格式输出最大值的位置。

输入样例:

3 2
6 3 
23 -9
6 -1

输出样例:

23
1 0
#include <stdio.h>int a[9][9];
int main(){int m,n;scanf("%d %d",&m,&n);for(int i=0;i<m;i++){for(int j=0;j<n;j++) scanf("%d",&a[i][j]);}int max=a[0][0],row=0,col=0;for(int i=0;i<m;i++){for(int j=0;j<n;j++) {if(a[i][j] > max) {max=a[i][j];row=i;col=j;}}}printf("%d\n",max);printf("%d %d",row,col);return 0;
}

7-3 换硬币(鸡兔同笼)

将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?

输入格式:
输入在一行中给出待换的零钱数额x∈(8,100)。

输出格式:
要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。

输入样例:

13

输出样例:

fen5:2, fen2:1, fen1:1, total:4
fen5:1, fen2:3, fen1:2, total:6
fen5:1, fen2:2, fen1:4, total:7
fen5:1, fen2:1, fen1:6, total:8
count = 4
#include <stdio.h>int main()
{int n;scanf("%d",&n);int cnt=0;for(int i_5=n/5;i_5>=1;i_5--){for(int i_2=n/2;i_2>=1;i_2--){int i_1=n-i_5*5-i_2*2;int total=i_1+i_2+i_5;if(i_1 > 0){printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",i_5,i_2,i_1,total);cnt++;}}}printf("count = %d",cnt);return 0;
}

7-4 逆序输出一个整数的各位数字

本题要求编写程序,对输入的一个非负整数,从低位开始逐位分割并输出它的各位数字。

输入格式:
输入在一行中给出一个长整型范围内的非负整数。

输出格式:
从低位开始逐位输出该整数的各位数字,每个数字后面有一个空格。

输入样例:

1234560

输出样例:

0 6 5 4 3 2 1 
#include <stdio.h>void Print(long long x){if(x==0) return; // 递归出口printf("%lld ",x%10);Print(x/10);// 递归
}
int main(){long long x;scanf("%lld",&x);if(x==0) {printf("0 ");}else Print(x);return 0;
}

7-5 交换最小值

本题要求编写程序,找出给定的N个数中的最小值,并将其与第一个数交换,最后输出交换后的序列。题目保证最小值是唯一的。

输入格式:
输入在第一行中给出一个正整数N(1≤n≤10),第二行给出N个整数,数字间以空格分隔。

输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。

输入样例:

5
8 2 5 1 4

输出样例:

1 2 5 8 4 
#include <stdio.h>int a[19];
int main(){int n;scanf("%d",&n);for(int i=0;i<n;i++) scanf("%d",&a[i]);int min=a[0],minIndex=0;for(int i=1;i<n;i++){if(a[i]<min) {min=a[i];minIndex=i;}}int tmp=a[0];a[0]=a[minIndex];a[minIndex]=tmp;for(int i=0;i<n;i++) printf("%d ",a[i]);return 0;
}

7-6 分段函数2

计算分段函数,测试数据分别是-1、5、12。
函数f(x)
输入格式:
输入一个数。

输出格式:
直接输出保留6位小数的结果,没有其它任何附加字符,没有宽度控制。

输入样例:

11

输出样例:

0.999912

输入样例:

7

输出样例:

8.000000
#include <stdio.h>
#include <math.h>double F(int x){if(x<0 && x!=-3)return x;else if(x>=0 && x<10 && x!=2 && x!=3)return x+1;else return sin(3*x);
}
int main(){int x;scanf("%d",&x);double ans=F(x);printf("%.6f",ans);return 0;
}

7-7 数组中能被5整除的数的和

在一维数组中有10个整数,求出其中能被5整除的所有数的和。

输入格式:
在一行中输入10个整数,数据之间用1个空格间隔。

输出格式:
直接输出运算结果,没有任何附加字符。

输入样例:

5 6 8 15 98 45 71 2 3 1

输出样例:

65
#include <stdio.h>int a[11];
int main(){int ans=0;for(int i=0;i<10;i++){scanf("%d",&a[i]);if(a[i]%5==0) ans+=a[i];} printf("%d",ans);return 0;
}

7-8 统计字母出现的次数(hash思想)

从键盘输入一行只有小写英文字母的字符串,用回车结束输入。统计26个英文字母出现的次数并依次输出。字符串长度不超过100个字符。

输入格式:
一行只有小写英文字母的字符串,用回车结束输入。

输出格式:
输出26行,按字典顺序输出26个小写英文字母和它们出现的次数。每个字母和它出现的次数占一行。字母和它出现的次数以一个空格隔开。

输入样例:
在这里给出一组输入。例如:

aaaaabbbcccdddeeffgghhhhijkllmnnopqrstuvwxyyyyzz

输出样例:
在这里给出相应的输出。例如:

a 5
b 3
c 3
d 3
e 2
f 2
g 2
h 4
i 1
j 1
k 1
l 2
m 1
n 2
o 1
p 1
q 1
r 1
s 1
t 1
u 1
v 1
w 1
x 1
y 4
z 2
#include <stdio.h>
#include <string.h>typedef struct Hash{char ch;int value;
}H;
char s[101];
int main()
{H h[29];// fgets(s,sizeof(s),stdin);scanf("%[^\n]",s);// 初始化hash表for(int i=0;i<26;i++){h[i].ch='a'+i;h[i].value=0;}for(int i=0;s[i]!='\0';i++)h[s[i]-'a'].value++;for(int i=0;i<26;i++) printf("%c %d\n",h[i].ch,h[i].value);return 0;
}

7-9 字母三角形

从键盘输入n,输出n行的如下图形

a

ab

abc

abcd

abcde

输入格式:
从键盘输入一个正整数n,输入数据保证不大于26。

输出格式:
如题所述的图形。注意输出的字母之间没有空格。

输入样例1:
5
输出样例1:
a
ab
abc
abcd
abcde

输入样例2:
8
输出样例2:
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh

#include <stdio.h>int main(){int n;scanf("%d",&n);for(int i=0;i<n;i++){for(int j=0;j<=i;j++){printf("%c",'a'+j);}printf("\n");}return 0;
}

7-10 简单求阶乘问题

本题要求编写程序,计算N的阶乘。

输入格式:
输入在一行中给出一个不超过12的正整数N。

输出格式:
在一行中输出阶乘的值。

输入样例:
4
输出样例:
24

#include <stdio.h>int Fac(int x){if(x==1) return 1;return x*Fac(x-1);
}
int main(){int n;scanf("%d",&n);int ans=Fac(n);printf("%d",ans);return 0;
}

7-11 矩阵转置

从键盘输入一个m(2<=m<=6)*n(2<=n<=6)阶的矩阵,编程输出它的转置矩阵。

输入格式:
在第一行输入矩阵的行数m和列数n的值,在第二行按照矩阵格式输入矩阵的数据,同行数据之间用空格隔开。

输出格式:
矩阵格式输出,同行数据之间用一个空格隔开。

输入样例:
3 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
输出样例:
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5

#include <stdio.h>int a[9][9];
int main(){// m行n列int m,n;scanf("%d %d",&m,&n);for(int i=0;i<m;i++){for(int j=0;j<n;j++) scanf("%d",&a[i][j]);}// n行m列for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(j==m-1)printf("%d",a[j][i]);else printf("%d ",a[j][i]);}printf("\n");}return 0;
}

7-12 输出所有大于平均值的数

本题要求编写程序,将输入的n个整数存入数组a中,然后计算这些数的平均值,再输出所有大于平均值的数。

输入格式:
输入在第1行中给出一个正整数n(1≤n≤10),第2行输入n个整数,其间以空格分隔。题目保证数据不超过长整型整数的范围。

输出格式:
输出在第1行给出平均值,保留2位小数。在第2行输出所有大于平均值的数,每个数的后面有一个空格;如果没有满足条件的数,则输出空行。

如果输入的n不在有效范围内,则在一行中输出"Invalid."。

输入样例1:
10
55 23 8 11 22 89 0 -1 78 186
输出样例1:
47.10
55 89 78 186
输入样例2:
0
输出样例2:
Invalid.

#include <stdio.h>int a[11];
int main(){int n;scanf("%d",&n);if(n<1 || n>10){printf("Invalid.");return 0;}long long sum=0;double average=0;for(int i=0;i<n;i++){scanf("%d",&a[i]);sum+=a[i];}average=sum*1.0/n;printf("%.2lf\n",average);int flag=0;for(int i=0;i<n;i++){if(a[i] > average) {printf("%d ",a[i]);flag=1;}}if(!flag) printf("\n");// 如果没有满足条件的数,则输出空行。return 0;
}

7-13 输出前n个英文大写字母

从键盘输入一个正整数n(我们约定输入的数不大于26)。输出前n个大写英文字母。

输入格式:
一个正整数n(我们约定输入的数不大于26)。

输出格式:
前n个大写英文字母。

注意:输出的每个字母之间没有空格,行末没有换行。

输入样例1:
3
输出样例1:
ABC
输入样例2:
5
输出样例2:
ABCDE

#include <stdio.h>int main()
{int n;scanf("%d",&n);for(int i=0;i<n;i++) printf("%c",'A'+i);return 0;
}

7-14 删除字符串中指定字符(字符串读取)

删除字符串中的指定字符,字符串和要删除的字符均由键盘输入。

输入格式:
在第一行中输入一个长度不超过20的字符串、并以回车结束;在第二行中输入待删除的一个字符,并以回车结束。

输出格式:
在一行中输出删完指定字符的字符串。

输入样例:
abcdcf
c
输出样例:
abdf

#include <stdio.h>char s[29],ch;
int main()
{// 1.// fgets(s,sizeof(s),stdin);// scanf("%c",&ch);//2.// gets(s);// scanf("%c",&ch);// 3.scanf("%[^\n]",s);scanf(" %c",&ch);for(int i=0;s[i]!='\0';i++) {if(s[i]!=ch) printf("%c",s[i]);}return 0;
}

使用fgets、gets读取字符串后,再读取其他数据,不需要使用getchar()读取缓冲区上的换行符;
使用scanf读取字符串后,再读取其他数据,读取时需要跳过缓冲区上的换行符;

7-15 特殊a串数列求和

给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。

输入格式:
输入在一行中给出不超过9的正整数a和n。

输出格式:
在一行中按照“s = 对应的和”的格式输出。

输入样例:
2 3
输出样例:
s = 246

#include <stdio.h>int main()
{int a,n;scanf("%d %d",&a,&n);int ans=0,num=a;while(n--){ans+=num;num=num*10+a;}printf("s = %d",ans);return 0;
}

7-16 分段函数求值

编写程序,根据从键盘输入的x的值,输出y的值。x和y都是双精度浮点数,输出精确到小数点后3位。x与y的函数关系如下图所示:
f(x)
输入格式:
输入是一个双精度浮点数。

输出格式:
输出是一个双精度浮点数,要求精确到小数点后3位。

输入样例:
在这里给出一组输入。例如:

3.1
输出样例:
在这里给出相应的输出。例如:

34.791

#include <stdio.h>
int main(){double x,y;scanf("%lf",&x);if(x < 0)y=x*x+9;elsey=x*x*x+5;printf("%.3f",y);return 0;
}

7-17 二维数组处理(一)

输入整型二维数组a(5行5列),完成如下要求:

输出二维数组a。

将a的第2行和第4行元素对调后,形成新的二维数组a并按行输出,每个元素之间隔一个空格。(行号从0开始计算)。

用对角线(指二维数组左上角到右下角的对角线)上的元素分别去除相应行的各元素,形成一个新的双精度型二维数组b并输出,每个输出占8列,输出到小数点后3位。

输入格式:
一个5行5列的整型二维数组

输出格式:
题目要求的各个输出

输入样例:
10 20 30 40 50
8 9 7 5 3
1 2 3 5 9
3 5 6 2 4
3 5 2 1 0
输出样例:
10 20 30 40 50
8 9 7 5 3
1 2 3 5 9
3 5 6 2 4
3 5 2 1 0
10 20 30 40 50
8 9 7 5 3
3 5 2 1 0
3 5 6 2 4
1 2 3 5 9
1.000 2.000 3.000 4.000 5.000
0.889 1.000 0.778 0.556 0.333
1.500 2.500 1.000 0.500 0.000
1.500 2.500 3.000 1.000 2.000
0.111 0.222 0.333 0.556 1.000

#include <stdio.h>void print(int a[][6],int x,int y){for(int i=0;i<x;i++){for(int j=0;j<y;j++) printf("%d ",a[i][j]);printf("\n");}
}int a[6][6];
double ans[6][6];int main()
{for(int i=0;i<5;i++){for(int j=0;j<5;j++) scanf("%d",&a[i][j]);}print(a,5,5);// 遍历第二行交换int p=2;for(int i=0;i<5;i++){int tmp=a[p][i];a[p][i]=a[p+2][i];a[p+2][i]=tmp;}print(a,5,5);for(int i=0;i<5;i++){for(int j=0;j<5;j++){ans[i][j]=a[i][j]*1.0/a[i][i];}}for(int i=0;i<5;i++){for(int j=0;j<5;j++){printf("%8.3f",ans[i][j]);}printf("\n");}return 0;
}

7-18 数字金字塔(打印图形)

从键盘输入一个正整数n,输出n行的数字金字塔。输入保证 1 <= n <= 9。

输入格式:
从键盘输入一个正整数n,输入保证 1 <= n <= 9。

输出格式:
输出n行的数字金字塔。每个数字之间没有空格。

输入样例1:
5
输出样例1:
1
121
12321
1234321
123454321

输入样例2:
7
输出样例2:
1
121
12321
1234321
123454321
12345654321
1234567654321

#include <stdio.h>int main(){int n;scanf("%d",&n);for(int i=1;i<=n;i++){// 行for(int k=0;k<n-i;k++) printf(" ");for(int j=1;j<=i;j++) printf("%d",j);for(int j=i-1;j>=1;j--) printf("%d",j);printf("\n");}return 0;
}

7-19 二维数组处理(二)

从键盘输入6行6列的双精度型二维数组。

(1)按行输出二维数组每个元素的值。

(2)将上三角形每个元素的值加1,下三角形每个元素的值减1,对角线元素不变。按行输出二维数组每个元素的值。

(3)求变化后数组的最大值,按输出示例输出最大值的行列号和最大值。输出格式如下:

The max is a[最大值的行下标][最大值的列下标] = 最大值

(4)用数组每个元素除以最大值,得到新的数组并输出。

输出格式要求:输出的每个浮点数占5列,输出到小数点后2位,右对齐。

输入格式:
双精度二维数组a(6行6列)

输出格式:
按题目要求输出

输入样例:
1 3 5 6 9 3
8 9 7 5 3 3
1 2 3 5 9 7
3 5 6 2 4 6
3 5 2 1 0 5
8 9 5 4 3 1
输出样例:
1.00 3.00 5.00 6.00 9.00 3.00
8.00 9.00 7.00 5.00 3.00 3.00
1.00 2.00 3.00 5.00 9.00 7.00
3.00 5.00 6.00 2.00 4.00 6.00
3.00 5.00 2.00 1.00 0.00 5.00
8.00 9.00 5.00 4.00 3.00 1.00
1.00 4.00 6.00 7.0010.00 4.00
7.00 9.00 8.00 6.00 4.00 4.00
0.00 1.00 3.00 6.0010.00 8.00
2.00 4.00 5.00 2.00 5.00 7.00
2.00 4.00 1.00 0.00 0.00 6.00
7.00 8.00 4.00 3.00 2.00 1.00
The max is a[0][4] = 10.00
0.10 0.40 0.60 0.70 1.00 0.40
0.70 0.90 0.80 0.60 0.40 0.40
0.00 0.10 0.30 0.60 1.00 0.80
0.20 0.40 0.50 0.20 0.50 0.70
0.20 0.40 0.10 0.00 0.00 0.60
0.70 0.80 0.40 0.30 0.20 0.10

#include <stdio.h>void print(double a[][6]) {for(int i=0;i<6;i++) {for(int j=0;j<6;j++) printf("%5.2f",a[i][j]);printf("\n");}
}
double a[6][6];
int main()
{for(int i=0;i<6;i++) {for(int j=0;j<6;j++) scanf("%lf",&a[i][j]);}print(a);// for(int i=0;i<6;i++) {for(int j=0;j<6;j++){if(i<j) a[i][j]+=1;if(i>j) a[i][j]-=1;}}print(a);double max=a[0][0];int x_Index=0,y_Index=0;for(int i=0;i<6;i++) {for(int j=0;j<6;j++){if(a[i][j] > max){max=a[i][j];x_Index=i;y_Index=j;}}}printf("The max is a[%d][%d] = %.2f\n",x_Index,y_Index,max);for(int i=0;i<6;i++) {for(int j=0;j<6;j++){a[i][j]/=max;}}print(a);return 0;
}

7-20 字符转换

本题要求提取一个字符串中的所有数字字符(‘0’……‘9’),将其转换为一个整数输出。

输入格式:
输入在一行中给出一个不超过80个字符且以回车结束的字符串。

输出格式:
在一行中输出转换后的整数。题目保证输出不超过长整型范围。

输入样例:
free82jeep5
输出样例:
825

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>int main()
{char s[89];gets(s);int ans=0;for(int i=0;s[i]!='\0';i++) {if(isdigit(s[i])) ans=ans*10+s[i]-'0';}printf("%d",ans);return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Python机器学习】NLP分词——利用分词器构建词汇表(一)
  • 题解:UVA1590 IP网络 IP Networks
  • iframe中postmessage重复返回多次相同信息
  • STM32G474的HAL_ADC_Start_DMA()传递指针问题
  • JS中this的指向问题、JS的执行机制、offset、client、scroll
  • 面试题:遍历三颗相连的满二叉树
  • OpenCV(第二关--读取图片和摄像头)实例+代码
  • 探索贪心算法:解决优化问题的高效策略
  • selenium(二)基于java、元素操控、Frame切换、元素等待
  • 【Go语言基础】调度器模型GPM与垃圾回收器GC
  • GNU/Linux - RSYSLOG
  • 基于大数据分析景区消费行为影响因素研究【消费等级预测、携程,去哪网数据抓取】
  • 去雾去雨算法
  • 力扣top300:1.两数之和
  • 37-RPC HTTP区别是什么
  • 4个实用的微服务测试策略
  • angular组件开发
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • git 常用命令
  • Java多态
  • Less 日常用法
  • Python利用正则抓取网页内容保存到本地
  • Quartz初级教程
  • ReactNativeweexDeviceOne对比
  • ubuntu 下nginx安装 并支持https协议
  • Vue 2.3、2.4 知识点小结
  • Vue2 SSR 的优化之旅
  • vuex 学习笔记 01
  • Windows Containers 大冒险: 容器网络
  • 安装python包到指定虚拟环境
  • 初识MongoDB分片
  • 基于webpack 的 vue 多页架构
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 利用DataURL技术在网页上显示图片
  • 什么软件可以剪辑音乐?
  • 一个项目push到多个远程Git仓库
  • 智能网联汽车信息安全
  • 最近的计划
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $(selector).each()和$.each()的区别
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (11)MSP430F5529 定时器B
  • (30)数组元素和与数字和的绝对差
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (算法)区间调度问题
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • .net8.0与halcon编程环境构建