这题的代码有什么问题?
  • 板块学术版
  • 楼主Nevergonna_CCF
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/11/15 22:17
  • 上次更新2023/11/4 00:26:52
查看原帖
这题的代码有什么问题?
547446
Nevergonna_CCF楼主2021/11/15 22:17
年龄排序
【题目描述】
有N个同学,每个同学有姓名(name)、年龄(age)两个属性。
请按照年龄从小到大的顺序,分别使用选择排序、插入排序算法进行排序,并比对两个升序序列有多少个元素相同。

输入:
第一行有一个正整数N(1<=N<=10000)。
接下来有N行,每一行包含两个属性,分别是学生的姓名(name)以及年龄(age),其中1<=strlen(name)<=32,5<=age<=30

输出:
单独一行,表示选择排序和插入排序的序列有多少元素相同。

【样例输入】:
3
8 xiaotong
8 xiaocheng
6 xiaomei

【样例输出】:
1

【样例解释】:
若使用选择排序,则会得到序列: {6 xiaomei},{8 xiaocheng},{8 xiaotong}
若使用插入排序,则会得到序列: {6 xiaomei},{8 xiaotong},{8 xiaocheng}
我们可以发现,选择排序的序列与插入排序的序列只有第1个位置元素相同,第2、第3个位置的元素均不相同,所以返回1

代码:

#include<iostream>
#include<string>
using namespace std;

struct xc{
	string name;
	int age;
};

void csort(xc a[], int n) {
	for (int i = 2; i <= n; i++) {
		int x = a[i].age;
		int j = i - 1;
		while (j >= 1) {
			if (x < a[j].age) {
				a[j + 1].age = a[j].age;
				a[j + 1].name = a[j].name;
				j--;
				continue;
			}
			break;
		}
		a[j+1].age = x;
	}
}

void xsort(xc a[], int n) {
	for (int i = 1; i <= n - 1; i++) {
		int minn = i;
		for (int j = minn + 1; j <= n; j++) {
			if (a[minn].age > a[j].age) {
				minn = j;
			}
		}
		swap(a[minn], a[i]);
	}
	return;
}


int main(){
	xc a[101],b[101];
	int n;
	int ans=0;
	cin >> n;
	for(int i = 1; i <= n; i++){
		cin >> a[i].age >> a[i].name;
		b[i].age = a[i].age;
		b[i].name =a[i].name;
	}
	csort(a, n);
	xsort(b, n);
	for(int i = 1; i<=n; i++){
		if((a[i].name==b[i].name)&&(a[i].age==b[i].age)) ans++;
	}
	cout << ans;
	return 0;
}

输出0?

2021/11/15 22:17
加载中...