数字游戏(string的sort的应用)

题目描述

牛牛举办了一场数字游戏,有n个玩家参加这个游戏,游戏开始每个玩家选定一个数,然后将这个数写在纸上(十进制数,无前缀零),然后接下来对于每一个数字将其数位按照非递减顺序排列,得到新的数,新数的前缀零将被忽略。得到最大数字的玩家赢得这个游戏。

输入描述:

输入包括两行,第一行包括一个整数n(1 ≤ n ≤ 50),即玩家的人数
第二行n个整数x[i](0 ≤ x[i] ≤ 100000),即每个玩家写下的整数。

输出描述:

输出一个整数,表示赢得游戏的那个玩家获得的最大数字是多少。
示例1

输入

复制
3
9638 8210 331

输出

复制
3689

解题思路1:利用string的排序函数(非降序就是升序)以及atoi(x.c_str())转化函数的应用就可以进行解题
#include<stdlib.h>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){
    int n,i,Max=-1;
    for(cin>>n,i=0;i<n;i++){
        string x;
        cin>>x,sort(x.begin(),x.end());
        Max=max(Max,atoi(x.c_str()));
    }
   cout<<Max;

}

解题思路2:不利用string的特性自己进行按位取出来再赋值给另一个数组,之后调用整数的sort()函数进行排序//不推荐

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int n;
    cin>>n;
    int* x=new int[n];
    int* rev=new int[n];
    for(int i=0;i<n;i++){
        cin>>x[i];
        int a[6],count=0,temp1=x[i],temp2=0;
        while(temp1>0){
            a[count++]=temp1%10;
            temp1/=10;
        }
        sort(a,a+count);
        for(int j=0;j<count;j++)
            temp2=temp2*10+a[j];
        rev[i]=temp2;
    }
    sort(rev,rev+n);
    cout<<rev[n-1]<<endl;
    delete(x);delete(rev);
}

 

转载于:https://www.cnblogs.com/cstdio1/p/10993198.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
STL(Standard Template Library)是C++标准库的一部分,它提供了许多现成的数据结构和算法,可以大大简化我们的编程工作。STL包含了很多常用的数据结构,如vector、list、map、set等,还包括算法、迭代器、函数对象等等。 在实际应用中,STL可以帮助我们快速地实现各种功能,以下是几个STL的应用场景: 1. 使用vector容器进行动态数组的操作 vector是STL中的一个容器,它可以动态地调整大小,支持快速的随机访问和在尾部插入/删除元素。我们可以使用vector来实现动态数组,从而方便地进行数组的操作。 例如,我们可以使用vector来存储一组整数,然后进行排序、查找、插入、删除等操作: ```C++ #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> nums = {5, 2, 3, 1, 4}; sort(nums.begin(), nums.end()); // 排序 int pos = lower_bound(nums.begin(), nums.end(), 3) - nums.begin(); // 查找 nums.insert(nums.begin() + pos, 6); // 插入 nums.erase(nums.begin() + 2); // 删除 for (int num : nums) cout << num << " "; cout << endl; return 0; } ``` 输出结果为:1 2 4 5 6 2. 使用map容器进行键值对的操作 map是STL中的一个关联容器,它提供了一种映射关系,可以将一个键和一个值关联起来,从而方便地进行键值对的操作。我们可以使用map来实现字典、计数器、索引等功能。 例如,我们可以使用map来统计一段文本中每个单词出现的次数: ```C++ #include <iostream> #include <map> #include <string> #include <algorithm> using namespace std; int main() { string text = "the quick brown fox jumps over the lazy dog"; map<string, int> word_count; string word; for (char ch : text) { if (isalpha(ch)) // 如果是字母 word += tolower(ch); // 转换为小写字母 else if (!word.empty()) // 如果是分隔符 { word_count[word]++; // 统计单词出现次数 word.clear(); // 清空当前单词 } } if (!word.empty()) // 处理最后一个单词 word_count[word]++; for (auto p : word_count) cout << p.first << ": " << p.second << endl; return 0; } ``` 输出结果为: brown: 1 dog: 1 fox: 1 jumps: 1 lazy: 1 over: 1 quick: 1 the: 2 3. 使用algorithm库进行常用算法的操作 algorithm库是STL中的一个库,它提供了许多常用的算法,如排序、查找、计数、求和等等。我们可以使用algorithm库来快速地实现各种功能。 例如,我们可以使用algorithm库来查找一组数字中的最大值和最小值: ```C++ #include <iostream> #include <algorithm> using namespace std; int main() { int nums[] = {5, 2, 3, 1, 4}; int n = sizeof(nums) / sizeof(nums[0]); int max_num = *max_element(nums, nums + n); // 查找最大值 int min_num = *min_element(nums, nums + n); // 查找最小值 cout << "max: " << max_num << endl; cout << "min: " << min_num << endl; return 0; } ``` 输出结果为: max: 5 min: 1 总之,STL是C++编程中非常重要的一部分,它可以大大简化我们的编程工作,提高我们的开发效率。在实际应用中,我们应该熟练掌握STL的各种容器和算法,以便更好地完成我们的工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值