提取不重复的整数

一、题目描述

输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
ios

输入描述:
函数

输入一个int型整数spa

输出描述:
code

按照从右向左的阅读顺序,返回一个不含重复数字的新的整数orm

输入例子:
ci

9876673

输出例子:
字符串

37689

二、程序

方案一

基本思路:初值设为0,而后读到和0相等的输出,而后基准值加1,即下一步与1比较相等输出,这样就避免了重复。
get

#include<iostream>
#include<string>

using namespace std;

int main(){
    int a[10]={0};
    string str;
    getline(cin,str);
    int num = str.size();
    int i;
    for(i=num-1;i>=0;i--){
        if(a[str[i]-'0']==0){
            cout<<str[i];
            a[str[i]-'0']++;
        }
    }
    return 0;
}

方案二

基本思路:借助容器进行操做。
input

//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容器。
string

#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];
            }

这里要求输出不重复的字符,则咱们应该采起这样的思路:若是不是重复的字符则输出,重复的直接跳过。

相关文章
相关标签/搜索