第一组
坐标判断
第一组
试题名称 1-1坐标判断
问题描述
极坐标是表示二维点坐标的一种方式,其定义如下:
在平面内取原点作为极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(取逆时针方向,顺时针方向为负值)。对于平面内任何一点M,用r表示线段OM的长度(r≥0),a表示从Ox到OM的角度,r叫做点M的极径,a叫做点M的极角,有序数对(r, a)就叫点M的极坐标。
已知二维点M的极坐标(r, a),判断输入是否合理,即r是否非负,若输入合理,进一步判断点M落于原点、x轴、y轴还是第一/二/三/四象限。输出判断结果。
输入说明
输入为两个整数。第1个整数表示点M的极径r,0≤r<10000,第2个整数表示点M的极角a,-360≤a≤360,单位为度。
输出说明
若输入不合理,即r值不符合要求的取值范围,输出整数-1。
若输入合理,根据情况分别输出以下值
(1)若点M在原点,输出“Origin”;
(2)若M在X轴上,输出 “X-axis”;
(3)若M在Y轴上,输出 “Y-axis”;
(4)若M在第一象限,输出 “1st Quadrant”;
(5)若M在第二象限,输出 “2nd Quadrant”;
(6)若M在第三象限,输出 “3rd Quadrant”;
(7)若M在第四象限,输出 “4th Quadrant”。
测试样例:
输入样例1
-20 45
输出样例1
-1
输入样例2
0 87
输出样例2
Origin
输入样例3
10 180
输出样例3
X-axis
输入样例4
10 45
输出样例4
1st Quadrant
#include <stdio.h>
#include <math.h>
int main(){
int r,a;
scanf("%d %d",&r,&a);
if(r<0){
printf("-1");
}else if(r==0){
printf("Origin");
}else if(r>0){
int q;
q = fabs(a);
if(q==0||q==180||q==360){
printf("X-axis");
}else if(q==90||q==270){
printf("Y-axis");
}else{
if((a>0&&a<90)||(a>-360&&a<-270) )printf("1st Quadrant");
else if((a>90&&a<180)||(a>-270&&a<-180) ) printf("2st Quadrant");
else if((a>180&&a<270)||(a>-180&&a<-90) ) printf("3st Quadrant");
else if((a>270&&a<360)||(a>-90&&a<0) ) printf("4st Quadrant");
}
}
return 0;
}
信息查询
试题名称 2-1信息查询
问题描述
给出n(2<n<100)个学生个人信息类数据,分别查找n个学生信息中成绩最高(若多名学生成绩都是最高值,则取学号最大的学生)和年龄最小的学生(若多名学生年龄都是最小值,则取学号最小的学生)信息,并输出查询结果。
输入说明
输入多行信息,第一行输入整数n(2<n<100),表示n个学生的信息;接下来为n行,每行输入一个学生信息,包含年龄(15-30之间的整数)、学号(不超过8位的正整数)和成绩(0-100之间的整数),各项数据均为整数,且整数之间用一个空格分隔,所有学生的学号均不相同。
输出说明
输出为两行,第一行为成绩最高(若多名学生成绩都是最高值,则取学号最大的学生)的学生完整信息,输出各项数据之间用一个空格分隔;
第二行为年龄最小(若多名学生年龄都是最小值,则取学号最小的学生)的学生完整信息,输出各项数据之间用一个空格分隔。
测试样例:
输入样例1
3
19 201907 85
20 201908 88
18 201909 81
输出样例1
20 201908 88
18 201909 81
输入样例2
4
19 2016 92
21 2017 88
20 2018 92
19 2019 62
输出样例2
20 2018 92
19 2016 92
#include <stdio.h>
struct Student{
int age;
int num;
int score;
}stu[100];
int main(){
int n;
scanf("%d",&n);
int i = 0, j = 0;
for(i=0;i<n;i++){
scanf("%d %d %d",&stu[i].age,&stu[i].num,&stu[i].score);
}
struct Student temp;
for(i = 0;i<n-1;i++){
for(j = i;j<n;j++){
if(stu[i].score<stu[j].score){
temp = stu[i];
stu[i]=stu[j];
stu[j] = temp;
}else if(stu[i].score==stu[j].score){
if(stu[i].num<stu[j].num){
temp = stu[i];
stu[i]=stu[j];
stu[j] = temp;}
}
}
}
printf("%d %d %d\n",stu[0].age,stu[0].num,stu[0].score);
for(i = 0;i<n-1;i++){
for(j = i;j<n;j++){
if(stu[i].age>stu[j].age){
temp = stu[i];
stu[i]=stu[j];
stu[j] = temp;
}else if(stu[i].age==stu[j].age){
if(stu[i].num>stu[j].num){
temp = stu[i];
stu[i]=stu[j];
stu[j] = temp;}
}
}
}
printf("%d %d %d",stu[0].age,stu[0].num,stu[0].score);
return 0;
}
数位统计
试题名称 3-1数位统计
问题描述
对于n个正整数,编程统计这些整数中数位1出现的总次数。
如给定n=3个正整数1020 1100 9911,则这n个正整数中数位1出现的总次数为5次。
输入说明
输入分两行:
第一行为一个正整数n,0<n<100;
第二行为n个正整数,每个正整数都小于230,整数之间以空格分隔.
输出说明
输出n个正整数中数位1出现的总次数并换行。
测试样例:
输入样例1
3
1020 1100 9911
输出样例1
5
输入样例2
5
1134 9033 1274 116 1000
输出样例2
6
#include <stdio.h>
int main(){
int n,count = 0;
scanf("%d",&n);
int a[100],i = 0;
for(i = 0;i<n;i++){
scanf("%d",&a[i]);
while(a[i]!=0){
if(a[i]%10==1){
count++;
}
a[i]=a[i]/10;
}
}
printf("%d",count);
return 0;
}
矩阵判断
在这里插入代码片
4-1 矩阵判断
问题描述
定义主对角线以下的元素都为0的矩阵为上三角矩阵,主对角线以上的元素都为0的矩阵为下三角矩阵,除了主对角线以外所有元素均为0的矩阵为正对角阵,以上均不包括主对角线元素。主对角线为从矩阵的左上角至右下角的连线(如下图红色连线的三个元素)。本题要求编写程序,判断一个给定的方阵是否为上、下三角矩阵或正对角阵。(不考虑所有元素均为0的矩阵。)
输入说明
每个矩阵信息的第一行给出一个正整数n(1<n<50),表示方阵行数和列数。随后n行,每行给出n个整数,其间以空格分隔,表示方阵各个元素。
输出说明
每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“UP”。如果输入的矩阵是下三角矩阵,输出“DOWN”。如果输入的矩阵是正对角阵,输出“PD”。如果以上三者均不满足,输出“NO”。
测试样例:
输入样例1:
3
1 2 3
0 4 5
0 0 6
输出样例1:
UP
输入样例2:
2
1 0
-8 2
输出样例2:
DOWN
输入样例3:
4
3 2 9 0
1 -4 5 6
6 7 -2 11
0 4 5 0
输出样例3:
NO
#include <stdio.h>
int main(){
int n,m,i = 0,j = 0;
scanf("%d",&n);
int a[55][55];
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
int flag = 1,temp = 1;
for(i=0,j=1;i<n,j<n-1;i++,j++){
for(m=j;m<n;m++){
if(a[i][m]!=0){
flag = 0;
}
break;
}
if(flag==0) break;
}
for(i=n-1,j=n-2;i>=1,j>=0;i--,j--){
for(m=j;m>=0;m--){
if(a[i][m]!=0){
temp = 0;
break;
}
}
if(temp==0) break;
}
if(flag==1&&temp==0) printf("DOWN");
else if(flag==0&&temp==1) printf("UP");
else if(flag ==1&&temp==1) printf("PD");
else printf("NO");
return 0;
}
优秀学生统计
在这里插入代码片试题名称 5-1优秀学生统计
问题描述
给定N个学生的成绩信息,包括学号(不超过8位数的整数)和5门课程的成绩([0,100]区间内的整数),要求输出总分最高学生的学号和总分,以及优秀学生人数,优秀学生的条件是至少有3门课均为优秀(成绩≥90)。
输入格式:
输入在一行中给出正整数N(0<N≤20)。随后N行,每行给出一位学生的成绩信息,格式为“学号成绩1 成绩2 成绩3成绩4成绩5”,中间以空格分隔。
输出格式:
在一行中输出总分最高学生的学号和总分,间隔一个空格。输入数据保证这样的学生是唯一的。
第二行输出优秀学生人数。
测试样例:
输入样例1
3
10001 78 93 75 55 60
10002 92 88 98 77 96
10003 87 83 56 45 58
输出样例1
10002 451
1
#include <stdio.h>
struct Student{
int num;
int score[5];
int sum;
}stu[25];
int main(){
int n,sum = 0;
scanf("%d",&n);
int i = 0,j = 0;
for(i=0;i<n;i++){
scanf("%d",&stu[i].num);
for(j=0;j<5;j++){
scanf("%d",&stu[i].score[j]);
sum = sum+stu[i].score[j];
}
stu[i].sum = sum;
sum = 0;
}
struct Student temp;
for(i=0;i<n-1;i++){
for(j=i;j<n;j++){
if(stu[i].sum<stu[j].sum){
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
}
printf("%d %d",stu[0].num,stu[0].sum);
int count = 0,flag = 0;
for(i=0;i<n;i++){
flag = 0;
for(j=0;j<5;j++){
if(stu[i].score[j]>=90) flag++;
}
if(flag>=3) count++;
}
printf("\n%d",count);
return 0;
}
码字不易,给个👍~我们下一篇博客见!
才疏学浅,个人理解难免有错,欢迎指正。