像素旋转 @ 2020-12-31 20:55:27
#include<string.h>
typedef struct student
{int num;
int chi;
int math;
int eng;
int sum;
char str[13];
}STU;
void string(STU*,int,int,int,int);
void reverse(char *,char *);
int main(void)
{int n,i,j;
STU stu[300]={0},*p=stu,temp,*q=NULL;
scanf("%d",&n);
for(i=1;i<=n;i++,p++)
{p->num=i;
scanf("%d%d%d",&p->chi,&p->math,&p->eng);
p->sum=p->chi+p->eng+p->math;
string(p,p->sum,p->chi,p->math,p->eng);
}
for(i=0;i<n-1;i++)
for(p=stu;p<stu+n-1-i;p++)
{
if(strcmp(p->str,(p+1)->str)<0)
{temp=*p;
*p=*(p+1);
*(p+1)=temp;
}
}
for(p=stu;p<stu+5;p++)
printf("%d %d\n",p->num,p->sum);
getchar();
getchar();
return 0;
}
void string(STU* p,int sum,int chi,int math,int eng)
{ char a[13]={0},*m,*n;
int cnt=0;
m=&a[cnt];
while(sum)
{a[cnt++]=(char)(48+sum%10);
sum/=10;
}
n=&a[cnt-1];
reverse(m,n);
m=&a[cnt];
while(chi)
{ a[cnt++]=(char)(48+chi%10);
chi/=10;
}
n=&a[cnt-1];
reverse(m,n);
m=&a[cnt];
while(math)
{ a[cnt++]=(char)(48+math%10);
math/=10;
}
n=&a[cnt-1];
reverse(m,n);
m=&a[cnt];
while(eng)
{ a[cnt++]=(char)(48+eng%10);
eng/=10;
}
n=&a[cnt-1];
reverse(m,n);
a[cnt]='\0';
strcpy(p->str,a);
}
void reverse(char*m,char*n)
{char *p,*q,temp;
for(p=m,q=n;p<q;p++,q--)
{temp=*p;
*p=*q;
*q=temp;
}
}
by 空格人 @ 2020-12-31 21:01:59
建议呢,数组开大点,毕竟只错一个点,我也没细看
by 空格人 @ 2020-12-31 21:03:17
还有,为什么奖学金都有指针巨佬啊,看不懂指针瑟瑟发抖
by Jiao_Xie @ 2020-12-31 21:06:43
看不懂指针瑟瑟发抖
by 像素旋转 @ 2021-01-01 12:19:19
#include<string.h>
typedef struct student
{int num;
int chi;
int math;
int eng;
int sum;
char str[13];
}STU;
void string(STU*,int,int);
void reverse(char *,char *);
int main(void)
{int n,i,j;
STU stu[300]={0},*p=stu,temp,*q=NULL;
scanf("%d",&n);
for(i=1;i<=n;i++,p++)
{p->num=i;
scanf("%d%d%d",&p->chi,&p->math,&p->eng);
p->sum=p->chi+p->eng+p->math;
string(p,p->sum,p->chi);
}
for(i=0;i<n-1;i++)
for(p=stu;p<stu+n-1-i;p++)
{
if(strcmp(p->str,(p+1)->str)<0)
{temp=*p;
*p=*(p+1);
*(p+1)=temp;
}
}
for(p=stu;p<stu+5;p++)
printf("%d %d\n",p->num,p->sum);
getchar();
getchar();
return 0;
}
void string(STU* p,int sum,int chi)
{ char a[13]={0},*m,*n;
int cnt=0;
m=&a[cnt];
while(sum)
{a[cnt++]=(char)(48+sum%10);
sum/=10;
}
n=&a[cnt-1];
reverse(m,n);
m=&a[cnt];
while(chi)
{ a[cnt++]=(char)(48+chi%10);
chi/=10;
}
n=&a[cnt-1];
reverse(m,n);
/*m=&a[cnt];
while(math)
{ a[cnt++]=(char)(48+math%10);
math/=10;
}
n=&a[cnt-1];
reverse(m,n);
m=&a[cnt];
while(eng)
{ a[cnt++]=(char)(48+eng%10);
eng/=10;
}
n=&a[cnt-1];
reverse(m,n);*/
a[cnt]='\0';
strcpy(p->str,a);
}
void reverse(char*m,char*n)
{char *p,*q,temp;
for(p=m,q=n;p<q;p++,q--)
{temp=*p;
*p=*q;
*q=temp;
}
}```
回去看过题目发现只要比总分和语文然后改了一下但是测试点8依旧没过
by 像素旋转 @ 2021-01-01 12:21:29
@空格人 我之前题目看错了是只比总分和语文就行了,改完后数组肯定够大了,但依旧1WA