π&γ
2021-01-31 22:23
采纳率: 50%
浏览 48

大佬们,请问PTA 1015德才论我编的C语言代码应该怎么改?感谢!感谢!

题目如下:

 

PTA上提交结果的显示是这样的:

 

 

我的代码:

#include <stdio.h>
#include <string.h>
struct student{
	char id[9];
	int moral;
	int intell;
	int total;
}; 
void sort(struct student*arr,int n);
void swap(struct student*a,struct student*b);
int main()
{
	int N,L,H;
	scanf("%d%d%d",&N,&L,&H);
	struct student stu[100];
	int i=0;
	int cnt=0;
	for(i=0;i<N;i++){
		scanf("%s %d %d",stu[i].id,&stu[i].moral,&stu[i].intell);
		stu[i].total=stu[i].intell+stu[i].moral;
	}
	struct student A[N];
	struct student B[N];
	struct student C[N];
	struct student D[N];
	int cnt1=0;
	int cnt2=0;
	int cnt3=0;
	int cnt4=0;
	for(i=0;i<N;i++){
		if(stu[i].moral>=L&&stu[i].intell>=L){
			cnt++;
			if(stu[i].moral>=H&&stu[i].intell>=H){
				A[cnt1++]=stu[i];
			}
			else if(stu[i].intell<H&&stu[i].moral>=H){
				B[cnt2++]=stu[i];
			}
			else if(stu[i].moral<H){
				if(stu[i].moral>stu[i].intell) C[cnt3++]=stu[i];
				else D[cnt4++]=stu[i];
			}
			
		}
	}
	printf("%d\n",cnt);
	sort(A,cnt1);
	sort(B,cnt2);
	sort(C,cnt3);
	sort(D,cnt4);
	return 0;
}
void sort(struct student*arr,int n)
{
	int i,j;
	struct student tmp;
	for(i=0;i<n-1;i++){
		for(j=0;j<n-i-1;j++){
			if(arr[j].total<arr[j+1].total) swap(&arr[j],&arr[j+1]);
			else if(arr[j].total==arr[j+1].total){
				if(arr[j].moral<arr[j+1].moral) swap(&arr[j],&arr[j+1]);
				else if(arr[j].moral==arr[j+1].moral){
					if(strcmp(arr[j].id,arr[j+1].id)>0) swap(&arr[j],&arr[j+1]);
					}
			}
		}
	} 
	for(i=0;i<n;i++){
		printf("%s %d %d\n",arr[i].id,arr[i].moral,arr[i].intell);
	}
}
void swap(struct student*a,struct student*b)
{
	struct student tmp=*a;
	*a=*b;
	*b=tmp;
}

感谢!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • pencefarmer 2021-01-31 22:40
    已采纳

    数组出现了栈溢出的情况,可能是系统栈区的内存不够用,所以提问者,需要将struct的单元内存大小进行缩减

     

    点赞 评论
  • pencefarmer 2021-01-31 22:28

    我也不知道

    点赞 评论
  • bosaidongmomo 2021-02-01 09:42

    有没有oj链接

    点赞 评论
  • π&γ 2021-02-01 12:22
    点赞 评论
  • bosaidongmomo 2021-02-01 13:43

    小哥哥,要避免双for循环

    点赞 评论
  • bosaidongmomo 2021-02-01 13:45
    
    #include<iostream>
    #include <stdio.h>
    #include <algorithm>
    #include <string.h>
    using namespace std;
    struct student {
    	int name;
    	int de;
    	int cai;
    	int d;
    	int sum;
    };
    bool mysort(student a,student b) {
    	if(a.d!= b.d) return a.d < b.d;
    	else if(a.sum != b.sum) return a.sum > b.sum;
    	else if(a.de != b.de) return a.de > b.de;
    	else return a.name<b.name;
    }
    int main() {
    	int n,L,H;
    	scanf("%d",&n);
    	int num=0;
    	scanf("%d%d",&L,&H);
    	student stu[n];
    	int count=n;
    	for(int i=0; i<n; i++) {
    		scanf("%d%d%d",&stu[i].name ,&stu[i].de ,&stu[i].cai);
    		stu[i].sum =stu[i].de +stu[i].cai ;
     
    		if(stu[i].de <L||stu[i].cai <L) {
    			count--;
    			stu[i].d =5;
    		}
     
    		else if(stu[i].de >=H&&stu[i].cai>=H)
    			stu[i].d =1;
    		else if(stu[i].de >=H&&stu[i].cai<H)
    			stu[i].d =2;
    		else if(stu[i].de <H&&stu[i].cai<H&&stu[i].de >=stu[i].cai )
    			stu[i].d =3;
    		else
    			stu[i].d =4;
     
     
    	}
    	sort(stu,stu+n,mysort);
    	printf("%d\n",count);
    	for(int i=0; i<count; i++) {
    		printf("%d %d %d\n",stu[i].name,stu[i].de,stu[i].cai);
    	}
    }
    点赞 评论

相关推荐 更多相似问题