[蓝蓝计算机考研算法训练二期]-day8

17 阅读1分钟

[蓝蓝计算机考研算法]-day8

成绩转换

输入一个百分制的成绩M,将其转换成对应的等级,具体转换规则如下:

  • 90-100 为 A;
  • 80-89 为 B;
  • 70-79 为 C;
  • 60-69 为 D;
  • 0-59 为 E;

思路

先判断100和0-59的成绩,因为这两和其他的成绩的计算方式不一样,设置一个变量j,判断了之后,100的j设置为9,0~59的j设置成5,其他的直接j=输入/10,再用switch判断。

具体实现

#include<stdio.h>
int main(){
	int i,j;
	scanf("%d",&i);
	if(i==100){
		j=9;
	}else if(i<=59){
		j=5;
	}else{
		j=i/10;
	}
	switch(j){
		case 9:printf("A");break;
		case 8:printf("B");break;
		case 7:printf("C");break;
		case 6:printf("D");break;
		case 5:printf("E");break;
	}

}

结果图

image.png

数值统计

统计给定的n个数中,负数、零和正数的个数。

输入

输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的个数,然后是n个实数;如果n=0,则表示输入结束,该行不做处理。

输出

对于每组输入数据,输出一行a,b和c,分别表示给定的数据中负数、零和正数的个数。

示例

输入:0
输出:数值统计已结束
输入:100
输出:输入错误
输入:3 
      2 0 -1
输出:负数有1个,零有1个,正数有0个
输入:3 0 2 -3
输出:负数有1个,零有1个,正数有1个
输入:4 3 1 0 -4
输出:负数有1个,零有1个,正数有2

思路

首先就是设一个变量接收输入的数有多少组,然后再用一个循环对每一组进行分析,我是用了很多个if else还有两个for嵌套做的,我觉得我写的很烂,可以用switch做的其实而且时间复杂度也很高;如果用结构体来做可能代码不会这么冗余

具体实现

#include<stdio.h>
int main(){
	int num,i=0;	
	scanf("%d",&num);
	printf("\n");
	if(num==0)
	{
		printf("数值统计已结束");
	}else if(num>=100){
		printf("输入错误"); 
	}
	else if(num!=0){
		for(int j=0;j<num;j++){
		int sum1=0,sum2=0,sum3=0;
			int k;
			scanf("%d",&k);
			for(;k>0;k--){
				scanf("%d",&i);
				if(i<0){
					sum1++;
				}else if(i==0){
					sum2++;
				}else if(i>0){
					sum3++;
				}
			}
			printf("负数有%d个,零有%d个,正数有%d个\n",sum1,sum2,sum3);
		}	
	} 	
}

结果图

image.png