1.题目描述
小虾仁觉得,简简单单的一个数的运算已经难不倒她了,她现在喜欢上了数组这个新概念,她觉得一堆数放在一起更有趣了。
小虾仁会告诉你一个数组,请你将它们中奇数从大到小,偶数从小到大排下序
先输出奇数,再输出偶数(注意:输出的是一行哦),多组输入。
ai <= 10^17
输入
第一行:一个整数n
第二行:数组的各个数
输出
一个排好序的数组
样例输入 Copy
10 1 2 3 4 5 6 7 8 9 10 5 2 34 5 65 7 3 234 5475 47587 1 7 7 87 173 23 1 2 87 273
样例输出 Copy
9 7 5 3 1 2 4 6 8 10 65 7 5 2 34 47587 5475 234 7 273 173 87 87 23 1 2
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// 比较函数,用于排序奇数,从大到小
bool compareOdd(long long a, long long b) {
return a > b;
}
// 比较函数,用于排序偶数,从小到大
bool compareEven(long long a, long long b) {
return a < b;
}
int main() {
int n;
long long num;
// 循环处理每组输入
while (cin >> n) {
vector<long long> odds, evens;
// 读取并分类奇数和偶数
for (int i = 0; i < n; ++i) {
cin >> num;
if (num % 2 == 0) {
evens.push_back(num);
} else {
odds.push_back(num);
}
}
// 分别对奇数和偶数进行排序
sort(odds.begin(), odds.end(), compareOdd);
sort(evens.begin(), evens.end(), compareEven);
// 输出排序后的奇数和偶数
for (long long odd : odds) {
cout << odd << " ";
}
for (long long even : evens) {
cout << even << " ";
}
cout << endl;
}
return 0;
}
2.题目描述
任意输入5个单词,按字典顺序进行排序。
输入
输入5个单词。
输出
按字典顺序排序。
样例输入 Copy
<span style="background-color:#ffffff"><span style="color:#333333"><span style="color:#333333"><span style="background-color:#f5f5f5">Follow me
BASIC
Great Wall
FORTRAN
Computer design
</span></span></span></span>
样例输出 Copy
<span style="background-color:#ffffff"><span style="color:#333333"><span style="color:#333333"><span style="background-color:#f5f5f5">BASIC
Computer design
FORTRAN
Follow me
Great Wall</span></span></span></span>
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
int main() {
vector<string> words(5);
// 读取5个单词
for (int i = 0; i < 5; ++i) {
getline(cin, words[i]);
// 去除单词前后的空格
words[i].erase(0, words[i].find_first_not_of(' '));
words[i].erase(words[i].find_last_not_of(' ') + 1);
}
// 按字典顺序排序
sort(words.begin(), words.end());
// 输出排序后的单词
for (const auto& word : words) {
cout << word << endl;
}
return 0;
}
在C++和C语言中,处理多组字符串输入的方法略有不同,但基本思路是相似的。下面分别给出C++和C语言处理多组字符串输入的示例代码。
C++ 示例
在C++中,你可以使用 std::string
和 std::getline
来读取多行字符串。这里是一个简单的示例:
cpp复制代码
#include <iostream> | |
#include <string> | |
#include <vector> | |
int main() { | |
std::string input; | |
std::vector<std::string> lines; | |
// 循环读取多行字符串,直到遇到文件结束或特定终止条件 | |
while (std::getline(std::cin, input)) { | |
if (input == "EOF") { // 假设输入"EOF"时停止读取 | |
break; | |
} | |
lines.push_back(input); | |
} | |
// 输出读取到的所有字符串 | |
for (const auto& line : lines) { | |
std::cout << line << std::endl; | |
} | |
return 0; | |
} |
在这个示例中,程序会不断读取用户输入的字符串,直到用户输入"EOF"为止。每次读取的字符串都会被添加到 lines
向量中。最后,程序会输出所有读取到的字符串。
C 语言示例
在C语言中,你可以使用字符数组(C风格字符串)和 fgets
函数来读取多行字符串。这里是一个简单的示例:
c复制代码
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#define MAX_LINE_LENGTH 1024 // 定义每行字符串的最大长度 | |
#define MAX_LINES 100 // 定义最多读取的行数 | |
int main() { | |
char lines[MAX_LINES][MAX_LINE_LENGTH]; | |
int i = 0; | |
// 循环读取多行字符串,直到遇到文件结束或达到最大行数 | |
while (i < MAX_LINES && fgets(lines[i], MAX_LINE_LENGTH, stdin) != NULL) { | |
// 去除换行符 | |
lines[i][strcspn(lines[i], "\n")] = 0; | |
// 检查是否达到终止条件,例如输入"EOF"时停止读取 | |
if (strcmp(lines[i], "EOF") == 0) { | |
break; | |
} | |
i++; | |
} | |
// 输出读取到的所有字符串 | |
for (int j = 0; j < i; j++) { | |
printf("%s\n", lines[j]); | |
} | |
return 0; | |
} |
在这个示例中,程序使用了一个二维字符数组 lines
来存储读取到的字符串。每次使用 fgets
读取一行字符串,并存储在 lines
数组中。如果读取到的字符串是"EOF",则停止读取。最后,程序会输出所有读取到的字符串。
请注意,这些示例代码仅用于演示目的,并未包含所有可能的错误处理。在实际应用中,你可能需要添加更多的错误检查和处理逻辑。