XDOJ试题

课堂练习题2-温度统计

描述: 
输入 n 天的摄氏温度,将其转换为华氏温度(华氏温度=9/5*摄氏温度+32),求
其平均温度、最高温度、最低温度并输出。
输入: 
第一行为表示天数的整数 n(0<n<=10)
第二行为 n 个整数(整数范围[-10,40]),表示 n 天的摄氏温度,整数之间用空
格分隔。
输出: 
将转换后的华氏温度按行输出,每行不超过 5 个温度值,超过则换行,每个温度
保留一位小数,温度之间用空格分隔。
在单独一行输出最低温度,最高温度和平均温度,用空格分隔。
输入样例: 
6
10 5 9 8 12 16
输出样例: 
50.0 41.0 48.2 46.4 53.6
60.8
41.0 60.8 50.0
#include <stdio.h>
int main(){
	double cen[15],sum = 0;
	int n,i=0,j;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%lf",&cen[i]);
		cen[i] = 9*cen[i]/5+32;
		sum = sum+cen[i];
	}
	for(i=0,j=1;i<n;i++,j++){
		printf("%.1lf ",cen[i]);
		if(j%5==0){
			printf("\n");
		}
	}
   for(i=0;i<n-1;i++){
   	for(j=i;j<n;j++){
   		if(cen[i]>cen[j]){
   			double t;
   			t = cen[i];
   			cen[i] = cen[j];
   			cen[j]  =t;
		   }
	   }
   }
   printf("\n%.1lf %.1lf %.1lf",cen[0],cen[n-1],sum/n);
	return 0;
}

字符串查找

编写一个函数fun,求一个字符串中的英文字母的个数。
主函数中输入字符串,调用函数,输出英文字母个数

输入说明:共一行,输入字符串

输出说明:输出一个整数,为英文字母个数

输入示例:aBc456

输出示例:3
#include <stdio.h>
#include <string.h>
void fun(char s[100]){
	int i = 0,count = 0;
	for(i=0;i<strlen(s);i++){
		if(s[i]>='A'&&s[i]<='z'){
			count++;
		}
	}
	printf("%d",count);
}
int main(){
	char s[100];
	gets(s);
	fun(s);
	return 0;
}

数字处理

标题	
数字处理

类别
函数与递归

时间限制	
2S

内存限制	
1000Kb

问题描述	
编写一个程序,从键盘输入一个非零整数n(0 < n <= 1000000000),对整数n进行如下处理:
将整数的各位数字取出来相加,如果结果是一位数则输出该数,否则重复上述过程,直到得到的结果为一位数,并输出该结果。
例如:n=456,变换过程如下
4+5+6=15
1+5=6
输出结果为6

输入说明	
一个非零整数n。

输出说明	
输出整数n的处理结果。

输入样例	
456

输出样例	
6
	
#include <stdio.h>
int main(){
	int n,t = 10;
	scanf("%d",&n);
	while(t>=10){
		t = 0;
		while(n!=0){
			t = t+n%10;
			n= n/10;
		}
		n=t;
	}
	printf("%d",t);
	return 0;
} 

字符串元素统计

题目:字符串元素统计
时间限制:1S
内存限制:10000Kb
问题描述:

编写一个函数,由实参传来一个字符串,统计字符串中字母,数字的个数,在主函数中输入字符及输出上述结果。
输入说明:
随机输入一个字符串。
输出说明:
依次输出该字符串中字母,数字的个数。
输入样例
abc123
输出样例:
3,3
#include <stdio.h>
#include <string.h>
void fun(char s[100]){
	int i,j = 0,k = 0;
	for(i=0;i<strlen(s);i++){
		if(s[i]>='0'&&s[i]<='9'){
			j++;
		}else if(s[i]>='A'&&s[i]<='z'){
			k++;
		} 
	}
	printf("%d,%d",k,j);
}
int main(){
	char s[100];
	gets(s);
	fun(s);
	return 0;
}

回文数

标题	
回文数

类别
数组

时间限制	
2S

内存限制	
1000Kb

问题描述	
若一个非负整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。
判断输入的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no。

输入说明	
输入为一个整数n,0<=n<1000000000。

输出说明	
若该整数为回文数,则输出整数各位数字之和,否则输出no。

输入样例	
样例1输入
131
样例2输入
24

输出样例
样例1输出	
5
样例2输出
no

#include <stdio.h>
int main(){
	int n;
	scanf("%d",&n);
	int m = n,k = 0;
	while(m){
		k = k*10+m%10;
		m = m/10;
	} 
	if(k==n){
       int sum = 0;
		while(k!=0){
			sum += k%10;
			k = k/10;
		}
		printf("%d",sum);
	}else printf("no");
	return 0;
}

调用函数求素数

编写函数fun,该函数的功能是求出小于等于x(x<=1000)的所有素数放在数组y中,素数的个数由函数返回。
主函数中输入整数x,调用函数,输出所有素数的个数并列出所有素数

输入说明:输入一个整数x

输出说明:共两行,第一行输出小于等于x的所有素数的个数
          第二行输出满足条件的素数,用空格分隔

输入示例:10

输出示例:4
          2 3 5 7
          #include <stdio.h>
          int is_prime(int n){
          	int i =2,j;
          	for(i=2;i<=n;i++){
          		if(n%i==0) break;
			  }
			  int flag = 0;
			  			  if(i==n) {
		  flag = 1;
		  }
		return flag;}
		  int main(){
		  	int i,n,count = 0;
		  	scanf("%d",&n);
            for(i=0;i<=n;i++){
            	if(is_prime(i)==1){
            		count++;
				}
			}
			printf("%d\n",count);
			 for(i=0;i<=n;i++){
            	if(is_prime(i)==1){
printf("%d ",i);
				}
			}
			  return 0;
		  }

水仙花数

题目:	
水仙花数

类别
流程控制

时间限制	
2S

内存限制	
10000Kb

问题描述	
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。
(例如:1^3 + 5^3 + 3^3 = 153)。
定义一个函数int function(int a, int b),计算区间[a,b]或区间[b,a]上水仙花数的个数。

输入说明	
输入由两个整数a和b构成,a和b之间用空格分隔。0<a,b<10000

输出说明	
输出区间[a,b]或区间[b,a]上水仙花数的个数。

输入样例	
3  1000  

输出样例	
4

提示	
a,b的位数n可能小于3
#include <stdio.h>
#include <math.h>
int function(int a,int b){
	int t;
	int count = 0,sum = 0;
		  if(a>b){
   	t = a;
   	a = b;
   	b = t;
   }
    if(b<100){
   	printf("0");
   }else{
	for(int i=a;i<=b;i++){
		int t =i,num = 0;
		while(t!=0){
			t=t/10;
			num++;
		}
		if(num<3){
			continue;
		}
		int j = i;
		while(j!=0){
			int p = j%10;
			sum = sum+pow(p,num);
			j = j/10;
		} 
		if(sum == i){
			count++;
		}
		sum = 0;
	}return count;}}
int main(){
   int a,b,t;
   int count;
   scanf("%d %d",&a,&b);
   count = function(a,b);
   printf("%d",count);
return 0;}

排序2

标题:	
排序2

类别:
数组

时间限制	
2S

内存限制	
1000Kb

问题描述:	
给定N个不同的整数,要求对这N个整数按如下规则排序并输出。
规则一:所有的偶数排在奇数前面。
规则二:在规则一的前提下按照从大到小的顺序排序。

输入说明	
数据由两行构成,第一行为整数n(n<=100),表示待排序整数的数量。第二行是n个整数,每个整数的取值区间都为[-32768~32767],整数之间以空格间隔。

输出说明	
在一行输出排好序的整数,整数之间以空格间隔。

输入样例	
5 
1 2 3 4 5

输出样例	
4 2 5 3 1
#include <stdio.h>
void range(int a[],int n){
	int i,j;
	for(i=0;i<n-1;i++){
		for(j=i;j<n;j++){
			if(a[i]<a[j]){
				int t;
				t = a[i];
				a[i] = a[j];
				a[j]  = t;
			}
		}
	}
	for(i=0;i<n;i++){
		printf("%d ",a[i]);
	}
}
int main(){
	int n,i,j = 0,k = 0;
	scanf("%d",&n);
	int a[100],b[100],c[100];
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	for(i= 0;i<n;i++){
			if(a[i]%2==0){
			b[j]=a[i];
			j++;
			}
			else if(a[i]%2==1){
				c[k]=a[i];
				k++;
			}
		}
	range(b,j);
	range(c,k);
	return 0;
}

矩阵

标题:
矩阵

类别:
数组
	
时间限制	
2S

内存限制	
10000Kb

问题描述	
请写一个程序,对于一个m行m列(2<m<20)的方阵,求其每一行、每一列及主、辅对角线元素之和,然后按照从大到小的顺序依次输出这些值。
注:主对角线是方阵从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线。

输入说明	
输入数据的第一行为一个正整数m;
接下来为m行、每行m个整数表示方阵的元素。

输出说明	
从大到小排列的一行整数,每个整数后跟一个空格,最后换行。

输入样例	
4
15  8   -2   6
31  24  18  71
-3  -9   27  13
17  21  38  69

输出样例	
159 145 144 135 81 60 44 32 28 27

#include <stdio.h>
int main(){
	int m,k = 0,sum = 0;
	scanf("%d",&m);
	int mat[20][20],num[200]; 
	int i = 0,j = 0;
	for(i=0;i<m;i++){
		for(j=0;j<m;j++){
			scanf("%d",&mat[i][j]);
		}
	}
	for(i=0;i<m;i++,k++){
		for(j=0;j<m;j++){
			sum = sum+mat[i][j];
		}
		
	  num[k] = sum;
			sum = 0;
	}
		for(j=0;j<m;j++,k++){
		for(i=0;i<m;i++){
			sum = sum+mat[i][j];
		}
		num[k]  =sum;
			sum = 0;
	}
	for(i=0,j=0;i<m,j<m;i++,j++){
		sum = sum+mat[i][j];
	}
	num[k] = sum;
	sum = 0;
	for(i=0,j=m-1;i<m;i++,j--){
		sum = sum+mat[i][j];
	}
	k++;
	num[k]= sum;
	for(i=0;i<k;i++){
		for(j=i;j<k+1;j++){
			if(num[i]<num[j]){
				int t;
				t= num[i];
				num[i] =num[j];
				num[j]=t;
			}
		}
	}
		for(i=0;i<k+1;i++){
		printf("%d ",num[i]);
	}
	return 0;
} 

等差数列

标题	
等差数列

类别
数组

时间限制	
2S

内存限制	
1000Kb

问题描述	
 请写一个程序,判断给定整数序列能否构成一个等差数列。

输入说明	
 输入数据由两行构成,第一行只有一个整数n(n<100),表示序列长度(该序列中整数的个数);
第二行为n个整数,每个整数的取值区间都为[-32768~32767],整数之间以空格间隔。

输出说明	
 对输入数据进行判断,不能构成等差数列输出“no”,能构成等差数列输出表示数列公差(相邻两项的差)的绝对值的一个整数。

输入样例	
样例1输入
6
23 15 4 18 35 11
样例2输入
5
2 6 8 4 10
输出样例	
样例1输出
no
样例2输出
2
#include <stdio.h>
#include <math.h>
int main(){
	int n;
	scanf("%d",&n);
	int num[n],i = 0,j;
	for(i = 0;i<n;i++){
		scanf("%d",&num[i]);
	}
	for(i=0;i<n-1;i++){
		for(j=i;j<n;j++){
			if(num[i]>num[j]){
				int t;
				t=num[i];
				num[i]=num[j];
				num[j]=t;
			}
		}
	}
	int flag = 0,t;
	t = num[1]-num[0];
	i = 1;
	while(i<n-1){
		if(num[i+1]-num[i]!=t){
			flag = 1;
			break;
		}
		i++;
	}
	int q = fabs(t);
	if(flag == 1){
		printf("no");
	}else  printf("%d",q);
	return 0;
} 

密码强度

标题	
密码强度

类别
字符串处理

时间限制	
1S

内存限制	
256Kb

问题描述	
每个人都有很多密码,你知道你的密码强度吗?假定密码由大写字母、小写字母、数字和非字母数字的符号这四类字符构成,密码强度计算规则如下:
1.	基础分:空密码(密码长度为零)0分,非空密码12.	加分项1:密码长度超过8位,+13.	加分项2:密码包含两类不同字符+1分,包含三类不同字符+2分,包含四类不同字符+3分
按照此规则计算的密码强度为0~5。请你设计一个程序计算给出的密码的强度。

输入说明	
输入为一个密码字符串,字符串长度不超过50个字符。

输出说明	
输出一个整数表示该密码的强度。

输入样例	
输入样例1
abcd
输入样例2
ab123

输出样例	
样例1输出:
1
样例2输出
2
#include <stdio.h>
#include <string.h>
int main(){
	int sum = 0,num;
	int count = 0,score = 0,mark = 0,goal = 0;
	char s[60];
	gets(s);
	if(strlen(s)!=0) sum++;
	if(strlen(s)>8) sum ++;
	for(int i=0;i<strlen(s);i++){
		if(s[i]>='0'&&s[i]<='9'){
			count = 1;
		}else if(s[i]>='a'&&s[i]<='z'){
			score = 1;
		}else if(s[i]>='A'&&s[i]<='Z'){
			mark = 1;
		}else goal = 1;
	}
	num = count+score+mark+goal;
      if(num==2) sum+=1;
      else if(num==3) sum+=2;
      else if(num==4) sum+=3;
      printf("%d",sum);
	return 0;
}

查找

标题	
查找

类别
数组
	
时间限制	
1S

内存限制	
256Kb

问题描述	
给定一个包含n个整数的数列A0,A1,A2,…An-1和一个整数k,依次输出 k在序列中出现的位置(从0开始计算)。

输入说明	
输入由两行构成,第一行为两个整数n和k,分别表示数列中整数个数和待查找整数k,n和k之间用空格分隔,0<n<1000<k<10000。
第二行为n个整数,表示数列中的各个整数,整数之间用空格分隔,每个整数均不超过10000。

输出说明	
依次输出整数k在数列中出现的位置(从0开始计算),如果k未在数列中出现,则输出-1。

输入样例
样例1输入	
5 20
10 20 30 20 5

样例2输入
5 20
10 30 25 34 44

输出样例	
样例1输出
1 3

样例2输出
-1
	
#include <stdio.h>
int main(){
	int n,m;
	scanf("%d %d",&n,&m);
	int c[n],i = 0,k = -1;
	for(i=0;i<n;i++){
		scanf("%d",&c[i]);
	}
	for(i=0;i<n;i++){
		if(c[i]==m){
			printf("%d ",i);
			k=1;
		}
	}
	if(k==-1){
		printf("%d",k);
	}
	return 0;
} 

图像旋转

标题	
图像旋转

类别
数组

时间限制	
1S

内存限制	
256Kb

问题描述	
旋转是图像处理的基本操作,在这个问题中,你需要将一个图像顺时针旋转90度。
计算机中的图像可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。例如,下面的矩阵(a)表示原始图像,矩阵(b)表示顺时针旋转90度后的图像。


输入说明	
输入的第一行包含两个整数n和m,分别表示图像矩阵的行数和列数。1 ≤ n, m ≤ 100。
接下来n行,每行包含m个非负整数,表示输入的图像,整数之间用空格分隔。

输出说明	
输出m行,每行n个整数,表示顺时针旋转90度之后的矩阵,元素之间用空格分隔。

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

输出样例	
3 1
2 5
4 3	
#include <stdio.h>
 int main(){
 	int n,m;
 	scanf("%d %d",&n,&m);
 	int i =0,j=0,p=0,q=n-1;
 	int a[n][m],b[m][n];
 	for(i=0;i<n;i++){
 		for(j=0;j<m;j++){
 			scanf("%d",&a[i][j]);
		 }
	 }
	 for(i=0;i<n;i++){
	 	for(j=0;j<m;j++){
			 b[p][q] = a[i][j];
			 p++;
		 }
		 q--;
		 p=0;
	 }
	 for(i=0;i<m;i++){
	 	for(j=0;j<n;j++){
	 		printf("%d ",b[i][j]);
		 }
		 printf("\n");
	 }
 	return 0;
 }

统计正整数的个数

标题	
统计正整数的个数

类别	
流程控制

时间限制	
1S

内存限制	
1000Kb

问题描述	
统计n个正整数中每个数出现的次数。

输入说明	
第一行是一个整数n(5<n<30),表示要待统计整数的个数;
第二行是n个整数,每个整数均小于100000

输出说明	
按照整数从小到大的顺序依次输出不同的整数及其出现次数,整数和出现次数之间用冒号(:)分隔。

输入样例	
12 
19 223 35 321 2 33 44 223 2 19 2 19

输出样例

2:3
19:3
33:1
35:1
44:1
223:2
321:1
include <stdio.h>
int main(){
	int n;
	scanf("%d",&n);
	int num[n],i = 0,j;
	for(i=0;i<n;i++){
	   scanf("%d",&num[i]);
	}
	for(i=0;i<n-1;i++){
		for(j=i;j<n;j++){
			int t;
			if(num[i]>num[j]){
				t = num[i];
				num[i] = num[j];
				num[j]=t;
			}
		}
	}

	for(i=0;i<n;i++){
		int count = 1;
		for(j=i+1;j<n;j++){
			if(num[j]==num[i]) count++;
			else break;
		}
		printf("%d:%d",num[i],count);
		printf("\n");
        i=j-1;
	}
	return 0;
}

后项除以前项

题目描述:
数组a包括10个整数,把a中所有的后项除以前项之商取整后存入数组b。

输入格式:共一行,输入数组a中的所有值;
输出格式:共一行,输出数组b中的值,以空格分隔。

示例:
输入:1 2 5 15 60 70 30 90 100 200
输出:2 2 3 4 1 0 3 1 2

#include <stdio.h>
int main(){
	int a[10],b[9];
	int i = 0;
	for(i = 0;i<10;i++){
		scanf("%d",&a[i]);
	}
	for(i=0;i<10;i++){
		b[i] = a[i+1]/a[i];
	}
		for(i=0;i<9;i++)
	 printf("%d ",b[i]);
	return 0;
}

数组元素平移

题目描述:
已知数组array[10]={1,2,3,4,5,6,7,8,9,10};要求把下标从0到p(p从键盘输入)的数组元素平移到数组的最后,并输出平移后的数组。

输入格式:输入一个整数p;
输出格式:共一行,输出平移后的数组,数字之间用空格分隔

示例:
输入:3
输出:5 6 7 8 9 10 1 2 3 4
#include <stdio.h>
int main(){
	int array[10] = {1,2,3,4,5,6,7,8,9,10};
	int b[10],i = 0,n,t;
	scanf("%d",&n);
	t = n;
	for(i=0;i<9-n;i++){
		b[i] = array[t+1];
		t++;
    printf("%d ",b[i]);
	}
    t = 0;
	for(i=9-n;i<10;i++){
		b[i] = array[t];
		t++;
		printf("%d ",b[i]);
	} 
	return 0;
}

对角线元素求和

1.求一个3×3的整形矩阵对角线元素之和

输入说明:输入3×3的整形矩阵,数据之间用空格分隔

输出说明:输出一个整数,即对角线的和

输入样例:1 2 3
          4 5 6
          7 8 9

输出样例:15
#include <stdio.h>
int main(){
	int s[3][3];
	int i = 0,j = 0;
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			scanf("%d",&
			s[i][j]);
		}
	}
	int sum = 0;
	for(i=0,j=0;i<3,j<3;i++,j++){
		sum = sum+s[i][j];
	}
	printf("%d",sum);
	return 0; 
}

奇偶排序

标题
奇偶排序

描述
定义一个一维整形数组num[20],输入正整数N(N≤20)代表num的实际元素个数,输入N个任意整数到num中,编写函数sort()实现排序处理,完成前面奇数,后面偶数,分别从小到大排序。使用指针完成地址传递,主函数完成N、数组元素的输入和处理后的数组元素输出。
   
时间限制
1	

内存限制
10000	

类别
1

输入说明
输入正整数N(N≤20)和N个任意排列的整形到一维数组num中。

输出说明
格式输出:数据之间空一格,奇数和偶数分界处空三个空格。

输入样例
5
2 3 7 8 4

输出样例
3 7   2 4 8

提示
使用指针作形参,实现地址传递。
前面奇数、后面偶数,分别从小到大排序。
输出数据之间空一格,奇数和偶数分界处空三个空格。
#include <stdio.h>
void range(int n[],int m){
	int i=0,j;
	for(i=0;i<m-1;i++){
		for(j=i;j<m;j++){
			int t;
			if(n[i]>n[j]){
				t = n[i];
				n[i]=n[j];
				n[j]=t;
			}
		}
	}
	for(i=0;i<m;i++){
		printf("%d ",n[i]);
	}
} 
int main(){
	int s[20],i = 0,n;
		scanf("%d",&n);
    int p = 0,q = 0,a[20],b[20];
	for(i=0;i<n;i++){
		scanf("%d",&s[i]);
		if(s[i]%2==0){
			b[p]=s[i];
			p++;
		}else {
			a[q] =s[i];
			q++; 
		}
	}
	range(a,q);
	printf("  ");
	range(b,p);
}

考试排名

试题名称	考试排名
时间限制:	1 秒
内存限制:	256KB

问题描述
某考试有5道题和1道附加题,每题最高得分20分,总分计算为所有题目分数之和。给出一组考生的数据,对其按照总分从高到低进行排名,总分相同时按附加题得分高者优先。

输入说明
第一行为一个整数N,表示考生个数(N小于100),后面N行为考生数据,每行包含考生姓名(长度不超过20个字符)以及6个以空格分隔的整数,分别表示第一题到第五题以及附加题的得分(最后一项)。

输出说明
输出排序结果,每行为一个考生的姓名、总分、附加题得分,以空格分开。

输入样例
3 
Jony 18 20 20 20 20 20 
Kavin 20 20 20 20 20 18 
Kaku 15 15 15 15 15 15

输出样例
Jony 118 20 
Kavin 118 18 
Kaku 90 15
#include <stdio.h>
struct Student{
	char name[30];
	int score[6];
	int sum;
}stu[150];
int main(){
	int i = 0,n,j;
	scanf("%d",&n);
	float sum = 0;
	for(i=0;i<n;i++){
		scanf("%s",stu[i].name);
		for(j=0;j<6;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;
			 }else if(stu[i].sum==stu[j].sum){
			 	if(stu[i].score[5]<stu[j].score[5]){
				temp = stu[i];
     			stu[i] = stu[j];
     			stu[j] = temp;
				 }
			 }
		 }
	 }
	 for(i=0;i<n;i++){
	 	printf("%s %d %d",stu[i].name,stu[i].sum,stu[i].score[5]);
	 	printf("\n");
	 }
	return 0;
}

成绩统计

试题名称	成绩统计
时间限制:	1 秒
内存限制:	256KB

问题描述
有N(0<N<=100)个学生,每个学生有3门课的成绩,输入每个学生数据(包括学号,姓名,三门课成绩),计算每个学生的平均成绩,并按照平均成绩从高到低的顺序输出学生信息,平均成绩相同时,则按照学号从小到大顺序输出。

输入说明
第一行输入学生个数N,然后逐行输入N个学生信息,包括学号,姓名,三门课成绩,学号为正整数,姓名不超过10个字符,各门课程成绩为整数,用空格分隔。

输出说明
按照平均成绩由高到低输出学生信息,平均成绩相同时,则按照学号从小到大顺序输出,输出信息包括学号、姓名、平均成绩(保留1位小数),用空格分隔,每个学生信息占一行。

输入样例
6
18001 LiMing 88 45 90
18003 WangWei 66 60 68
18004 ZhangSan 77 90 83
18110 HanMeiMei 88 77 97
18122 SuSan 66 23 87
18008 YangYang 88 76 95

输出样例
18110 HanMeiMei 87.3
18008 YangYang 86.3
18004 ZhangSan 83.3
18001 LiMing 74.3
18003 WangWei 64.7
18122 SuSan 58.7

#include <stdio.h>
struct Student{
	int num;
	char name[10];
	float score[3];
	float aver;
}stu[150];
int main(){
	int i = 0,j = 0,n;
	scanf("%d",&n);
	float sum = 0;
	for(i=0;i<n;i++){
		scanf("%d %s",&stu[i].num,stu[i].name);
		for(j=0;j<3;j++){
			scanf("%f",&stu[i].score[j]);
		  sum = sum+stu[i].score[j];
		}
		stu[i].aver = sum/3;
     sum = 0;
	} 
	struct Student temp;
	for(i=0;i<n-1;i++){
		for(j=i;j<n;j++){
			if(stu[i].aver<stu[j].aver){
				temp = stu[i];
				stu[i] = stu[j];
				stu[j] = temp;
			}else 	if(stu[i].aver==stu[j].aver){
				if(stu[i].num>stu[j].num){
				temp = stu[i];
				stu[i]= stu[j];
				stu[j] = temp;
			}}
		}
	}
	for(i=0;i<n;i++){
		printf("%d %s %.1f\n",stu[i].num,stu[i].name,stu[i].aver);
	}
	return 0;
}

码字不易,给个👍~我们下一篇博客见!

才疏学浅,个人理解难免有错,欢迎指正。

  • 10
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
xdoj application是一个用于竞技编程训练和练习的平台。 首先,xdoj application提供了大量的编程题库,涵盖了各种语言和难度级别。这些题目既有经典的算法问题,也有实际应用的编程挑战,可以满足不同水平的程序员的需求。通过解题,程序员可以提高自己的编程能力和算法思维。 其次,xdoj application提供了在线的程序编译和运行环境。程序员可以直接在平台上编写和测试自己的代码,无需安装任何开发工具。这大大降低了环境配置的难度,让程序员能够更加专注于解决问题本身。 另外,xdoj application还支持代码提交和评测功能。程序员可以将自己的代码提交到平台上,系统会对其进行自动评测,并给出相应的反馈和评分。这样,程序员可以及时了解自己的代码是否正确并进行相应的优化。同时,平台上也会展示其他程序员的提交和评测结果,让程序员能够学习和借鉴其他人的解决思路和代码实现。 最后,xdoj application还提供了练习和比赛等功能。程序员可以选择不同类型的练习模式,根据自己的需求进行编程训练。同时,平台也会定期举办编程比赛,供程序员们进行交流和竞争。这些比赛既能检验程序员的编程水平,也能提供一种实战的机会,加深对编程知识的理解和应用。 总之,xdoj application是一个功能齐全且用户友好的竞技编程平台,能够帮助程序员提高编程能力、锻炼算法思维,并提供交流、学习和竞争的机会。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值