算法竞赛刷题日记(1)

 

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",则停止读取。最后,程序会输出所有读取到的字符串。

请注意,这些示例代码仅用于演示目的,并未包含所有可能的错误处理。在实际应用中,你可能需要添加更多的错误检查和处理逻辑。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值