小可爱


私信TA

用户名:20200331

访问量:7838

签 名:

新的开始

等  级
排  名 1104
经  验 3078
参赛次数 21
文章发表 11
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

定义 一个结构体->构造一个动态数组->输入->排序->输出

注意事项:

1、比较字符串需要用到strcmp(str1,str2);

2、这个题的输入并不是一次,而是需要多组数据输入;



参考代码(自定义函数):

# include <stdio.h>
# include <malloc.h>
# include <string.h>     //里面有strcmp(str1, str2);函数

//定义一个结构体类型
struct Student
{
	char name[101];  
	int score;
	int age;
};
void sort(struct Student * pArr, int N);   //排序函数
int main()
{
        int i;
    	int N;	
    	struct Student * pArr;	
    	while(scanf("%d", &N)!=EOF)
	{
    	       //分配内存
    	        pArr = (struct Student *)malloc(sizeof(struct Student)*N);
        	//输入
        	for( i=0; i<N; i++)
        	scanf("%s %d %d", pArr[i].name, &pArr[i].age, &pArr[i].score);
        	
        	//排序
    	        sort(pArr, N);
    	
    	        //输出	
        	for( i=0; i<N; i++)
    	         printf("%s %d %d\n", pArr[i].name, pArr[i].age, pArr[i].score);
	}

	return 0;
}
//排序函数
void sort(struct Student * pArr, int N)  
{
	int i, j;
	struct Student t;
        
        //冒泡排序
	for (i=0; i<N; i++)
	{
    	for (j=i+1; j<N; j++)
    	{
    		if (pArr[j].score < pArr[i].score)
    		{
    			t = pArr[j];
    			pArr[j] = pArr[i];
    			pArr[i] = t;
    		}
		else if (pArr[j].score == pArr[i].score && strcmp(pArr[i].name, pArr[j].name)>0)
    		{
    			t = pArr[j];
    			pArr[j] = pArr[i];
    			pArr[i] = t;
    		}
		else if (pArr[j].score == pArr[i].score && pArr[j].age < pArr[i].age && strcmp(pArr[j].name, pArr[i].name)==0)
    		{
    			t = pArr[j];
    			pArr[j] = pArr[i];
    			pArr[i] = t;
    		}
    	}
    }

}

参考代码:

# include <stdio.h>
# include <string.h>   //里面有strcmp(str1, str2);函数      
struct Student
{
	char name[101];
	int score;
	int age;
}S[2000], t;  //s[2000]里面的数字大一点

int main()
{
	int N;		
	int i, j;
	while(scanf("%d", &N)!=EOF)
	{
    	//输入
    	for(i=0; i<N; i++)
    	{
    		scanf("%s %d %d", S[i].name, &S[i].age, &S[i].score);
    	}
        //按成绩排序
    	for (i=0; i<N; i++)
    	{
    		for (j=i+1; j<N; j++)
    		{
    			if (S[j].score < S[i].score)
    			{
    				t = S[j];
    				S[j] = S[i];
    				S[i] = t;
    			}
				else if (S[j].score == S[i].score && strcmp(S[i].name, S[j].name)>0)
    			{
    				t = S[j];
    				S[j] = S[i];
    				S[i] = t;
    			}
		    	else if (S[j].score == S[i].score && S[j].age < S[i].age && strcmp(S[j].name, S[i].name)==0)
    			{
    				t = S[j];
    				S[j] = S[i];
    				S[i] = t;
    			}
    		}
    	}
    	//输出
    	for(i=0; i<N; i++)
    		printf("%s %d %d\n", S[i].name, S[i].age, S[i].score);
	}

	return 0;
}

我是一个小垃圾,这题我做了很久,错了很多次。

 

0.0分

5 人评分

  评论区

求助楼主,为什么我的一直答案错误啊
2020-12-16 18:53:13
if(node[i].na==node[j].na&&node[i].num==node[j].num&&node[i].age>node[j].age){
				swap(&node[i],&node[j]);
			}
		}
	}
	for(int i=0;i<n;i++){
		printf("%s %d %d\n",node[i].name,node[i].age,node[i].num);
	}
}
}
}
2020-12-16 18:52:44
#include <stdio.h>
struct date{
	char name[101];
	int age;
	int num;
	char na;
}node[1001];
void swap(struct date *p,struct date *q){
	struct date temp;
	temp=*p;
	*p=*q;
	*q=temp;
}
int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		if(n<=1000&&n>0){
	for(int i=0;i<n;i++){
		scanf("%s %d %d",&node[i].name,&node[i].age,&node[i].num);
		node[i].na=node[i].name[0];
	}
	for(int i=0;i<n-1;i++){
		for(int j=i+1;j<n;j++){
			if(node[i].num>node[j].num){
				swap(&node[i],&node[j]);
			}
			if(node[i].na>node[j].na&&node[i].num==node[j].num){
				swap(&node[i],&node[j]);
			}
2020-12-16 18:52:31
  • «
  • 1
  • »