提取不重复的整数
2016-05-23 10:59
387 查看
1、题目描述
输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。输入描述:
输入一个int型整数
输出描述:
按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
输入例子:
9876673
输出例子:
37689
2、程序
方案一
基本思路:初值设为0,然后读到和0相等的输出,然后基准值加1,即下一步与1比较相等输出,这样就避免了重复。#include<iostream> #include<string> using namespace std; int main(){ int a[10]={0}; //这里定义a作为比较值 string str; getline(cin,str); int num = str.size(); int i; for(i=num-1;i>=0;i--){ if(a[str[i]-'0']==0){ //这里是string类型转化为int类型的简便方法,即字符减去字符'0'即可 cout<<str[i]; a[str[i]-'0']++; } } return 0; }
方案二
基本思路:借助容器进行操作。//set用来记录已经被我们记录了的不重复的数字 //queue保证从后往前以此输出 #include <iostream> #include <set> #include <queue> using namespace std; int main() { int n; cin>>n; set<int> temp; queue<int> res; while(n%10){ if(temp.find(n%10)==temp.end()){ res.push(n%10); temp.insert(n%10); } n/=10; } while(!res.empty()){ cout<<res.front(); res.pop(); } return 0; }
方案三
基本思路:以上方案均适用于数字,不具有普遍性。直接以字符串形式输入,这样既适用于字符串,也适用于数字。利用容器进行操作,这里位置和数值对应关系,我们可以采用map容器。#include <iostream> #include <string> #include <map> #include <stdio.h> #include <algorithm> using namespace std; int main(){ string str; while(cin>>str) //等待输入结束 //当然,这一步可以采用getline()和for()循环替代,即getline(cin,str)获取输入,然后for(int i=0;i<str.length();i++)控制循环输入 { map<char,int> map_input; //直接将数字作为字符串输入,这样的方案较好 for(int i=str.size()-1;i>=0;i--){ //for(int i=str.length()-1;i>=0;i--) //起始位置为str.size()-1而不是str.size(),终点是0而不是1,下标为size()的数值越界了(下标从0开始的) if(map_input.find(str[i])!=map_input.end()){ //用find函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器 //把最后一个作为基准值进行比较,即key选取has.end()这一元素 map_input[str[i]]++; //如果查找到与参考值相等的,则将该key对应的value加1 } else{ map_input[str[i]]=1; //没有与参考值相等的key,value均为1,我们值输出value值为1的key cout<<str[i]; } } cout<<endl; } }
注意:
(1)获取输入以及循环的基本操作:
方法一:
while(cin >> str){ //处理函数 }
方法二:
getline(cin,str); //获得输入并将输入的数值绑定到str变量 for(int i=0;i<str.length();i++){ //处理函数 }
(2)这里涉及到一个很重要的操作,即选择字符串中的某一些数据输出,这里不是所谓的删除操作,那样问题就复杂化了,我们可以转化为有条件的输出,例如:
if(map_input.find(str[i]) != map_input.end()) //把最后一个作为基准值进行比较,即key选取has.end()这一元素 map_input[str[i]]++; else { map_input[str[i]] = 1; cout<< str[i]; }
这里要求输出不重复的字符,则我们应该采取这样的思路:如果不是重复的字符则输出,重复的直接跳过。
相关文章推荐
- HDU 5700 区间交
- Souerce 之 图片格式
- picasson图片加载
- numpy之文件存取
- opencv学习笔记---hsv颜色空间
- Spark自定义分区(Partitioner)
- 关于扫描二维码下载app功能实现方法
- win7与android设备通过蓝牙串口的连接方法
- 第五届 年龄巧合 暴力循环
- 最新版Butterknife plugin支持butterknife7.0.1和兼容butterknife 6.1.0及以下
- SBT编译spark-redis-master
- 推挽与开漏
- HDU 5698 瞬间移动
- C++ new操作符详解
- 大牛博客
- Cognos CFG-ERR-0103 无法启动 IBM Cognos 服务
- Android:利用SharedPreferences实现自动登录
- 最大回文子串(java)
- (读大型网站技术架构)-秒杀系统设计
- MongoDB基础之一:Conetos下安装MongoDB