题解
- 这题遇到了一个问题:如果用浮点型来保存人口,则在用printf("%f")来输出时小数部分会输出无效0凑满6位,即使加上格式控制输出的小数位数也是固定的,不能保持每组都和输入的小数位数一样。(cout输出或%g格式输出都可能会吞掉几位小数)
- 解决办法:用字符串来保存人口,当需要将其作为整型使用时,可以用stdlib.h下的atoi函数,作用就是将整数意义的字符串化为整型数据。
题目
问题 D: 人口数量排行(数组,结构体)
时间限制: 1 Sec 内存限制: 128 MB
提交: 104 解决: 41
[提交][状态][讨论版]
题目描述
2016年上半年全国31省市进行了人口统计数据。输入n,输入n个省及其人口统计数据,请输出人口数量排行榜(降序)。
注:不可使用系统自带sort函数。
输入
输入n
n行,每行数据为:省 人口数量(单位:万人)
输出
输出人口数量排行榜(降序)
样例输入
5
浙江 5539
湖南 6783
山东 9847.16
四川 8204
湖北 5851.5
样例输出
山东 9847.16万人
四川 8204万人
湖南 6783万人
湖北 5851.5万人
浙江 5539万人
代码块
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int i, j, n;
scanf("%d", &n);
char a[n][100];
char b[n][100];
for(i=0; i<n; i++)
scanf("%s%s", a[i], b[i]);
for(i=0; i<n-1; i++)
{
for(j=0; j<n-i-1; j++)
{
if(atoi(b[j])<atoi(b[j+1]))
{
char temp[100];
strcpy(temp, b[j]);
strcpy(b[j], b[j+1]);
strcpy(b[j+1], temp);
strcpy(temp, a[j]);
strcpy(a[j], a[j+1]);
strcpy(a[j+1], temp);
}
}
}
for(i=0; i<n; i++)
printf("%s %s万人\n", a[i], b[i]);
return 0;
}