详细题目见educoder 总结:还是练题练得太少,本题的重点在于排序,综合考虑到2个因素来排序,价格优先级最高,其次书名的字典序。
#include <string.h> #include <iostream> using namespace std; //请在此添加代码,实现书籍数据的输入、排序和输出 /********** Begin *********/ typedef struct book{ char name[55]; float price; }mybook; int main() { int n;//n本书 cin >> n; mybook tbook[105]; //输入 for(int i=0; i<n; i++){ getchar(); // 重要!!!吸收掉上面 cin>>n 时输入的回车符号。 cin.getline(tbook[i].name,55); cin>>tbook[i].price; } // 排序 for(int i=0;i<n-1;i++){ int k=i; //标记最小位置 for(int j=i+1;j<n;j++){ if(tbook[k].price > tbook[j].price) k = j; else if(tbook[k].price == tbook[j].price && strcmp(tbook[k].name, tbook[j].name) > 0 ) //如果后面的串更小 k = j; } if(k!=i){ //需要交换 mybook t = tbook[k]; tbook[k] = tbook[i]; tbook[i] = t; } } //输出 for(int i=0; i<n; i++){ cout << tbook[i].price << ", " << tbook[i].name << "\n"; } return 0; } /********** End **********/