问一下这段代码在Devc++上没有问题,但在PTA上答案就不对
这是题目
这是程序
#include <stdio.h>
struct student {
char name[11];
long int age;
char number[18];
};
int main() {
int n, i, j;
long int min = 50000000, min_index;
struct student a[10];
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s %d %s", a[i].name, &a[i].age, a[i].number);
getchar();
}
for (j = 0; j < n; j++) {
for (i = 0; i < n; i++) {
if (a[i].age < min) {
min = a[i].age;
min_index = i;
}
}
printf("%s %d %s\n", a[min_index].name, a[min_index].age, a[min_index].number);
a[min_index].age = 50000000;
min = 50000000;
}
return 0;
}
在Devc++上的运行
修改如下,供参考:
#include <stdio.h>
struct student {
char name[11];
long int age;
char number[18];
};
int main() {
int n, i, j;
//long int min = 50000000, min_index;
struct student a[10], tmp;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s %ld %s", a[i].name, &a[i].age, a[i].number);
getchar();
}
for (j = 0; j < n - 1; j++) {
for (i = 0; i < n - 1 - j; i++) {
if (a[i].age > a[i + 1].age){ //if (a[i].age < min) {
tmp = a[i]; //min = a[i].age;
a[i] = a[i + 1]; //min_index = i;
a[i + 1] = tmp;
}
}
//printf("%s %d %s\n", a[min_index].name, a[min_index].age, a[min_index].number);
//a[min_index].age = 50000000;
//min = 50000000;
}
for (i = 0; i < n; i++) {
if (i) printf("\n");
printf("%s %ld %s", a[i].name, a[i].age, a[i].number);
}
return 0;
}
你在排序里面就打印了
这赋值是啥意思
a[min_index].age = 50000000;
min = 50000000;
你这两边代码不一样呢,复制你正常的代码,粘贴到网站平台上试试
稍微改了一下你的循环,本地上能跑,PTA上能不能跑就不清楚了
大致思路就是用一个数组承接下标,然后冒泡排序(可以选择更换,懒得写更优的了)
#include <stdio.h>
struct student {
char name[11];
long int age;
char number[18];
};
int main() {
int n, i, j;
long int min = 50000000, min_index;
struct student a[10];
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s %d %s", a[i].name, &a[i].age, a[i].number);
getchar();
}
int b[10],t;
for (int i = 0; i < n; i++)
{
b[i] = i;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n - 1 - i; j++)
{
if (a[b[j]].age > a[b[j + 1]].age)
{
t = b[j];
b[j] = b[j + 1];
b[j + 1] = t;
}
}
}
for (int i = 0; i < n; i++)
{
printf("%s %d %s\n", a[b[i]].name, a[b[i]].age, a[b[i]].number);
}
return 0;
}
char *match( char *s, char ch1, char ch2 )
{
char a[MAXS]="",*p;//a字符数组是打印的ch1和ch2之间的字符,*p指针是返回ch1的地址
int i=0,j=0;
while((*(s+i)!=ch1)&&(*(s+i)!=0))//从第一个元素找起到ch1或字符串停止符'\0'停止
{
i++;
}p=s+i;//p指针指向找到ch1或'\0'后s字符串后面的部分
a[j]=*(s+i);//将ch1或'\0'给到a数组第一个元素------①
j++;i++;
while((*(s+i)!=0)&&(*(s+i)!=ch2))//找ch2或'\0'停止,期间复制中间字符给a数组
{
a[j]=*(s+i);
j++;i++;
}//---------②
a[j]=*(s+i);//最后加上ch2或'\0'
printf("%s\n",a);
return p;
}
①—②实际是do while循环
灵活使用数组和指针,对相应字符串的表示方法、原理、结构需要一定的了解。