提取不重複的整數

一、題目描述

輸入一個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];
            }

這裏要求輸出不重複的字符,則咱們應該採起這樣的思路:若是不是重複的字符則輸出,重複的直接跳過。

相關文章
相關標籤/搜索