进制转换与贪心算法

· · 个人记录

分享一下关于进制转换和贪心算法的笔记

1.进制转换

进制转换共分为(主要的)四种:

①二进制:0~1(逢二进一);

②八进制:0~7(逢八进一);

③十进制:0~9(逢十进一);

④十六进制:0~9、A~F(逢十六进一);

十进制怎么转其他进制呢?

我们只需记住两个口诀:

十进制转n进制:

除n取余,逆序排列

n进制转十进制:

从左往右,按权展开

以二进制为例:

假如一个十进制数为31,想让它转成二进制:

31/2=15......1

15/2=7......1

7/2=3......1

3/3=1......1

1/2=0......1

所以答案就是11111

下面说一下进制前缀:

二进制:ob

int x=ob1001//x=十进制9

八进制:o

int y=o74//y=十进制60

十六进制:ox

int z=oxa3;//z=十进制163

今年的蓝桥杯刚好有一题是进制转换,我就来给大家讲一下这道题。

9进制回文数

#include<iostream>
#include<algorithm>//sort头文件 
using namespace std;
bool cheak(int i){//bool类型的函数,即9进制的自定义函数 
    //判断是否为9进制数 
    string s;
    while(i){//对i进行循环 
        s+=i%9+'0';
        if((i%9)%2!=1){//判断 
            return false;
        }
        i/=9;//i除等于9 
    } 
    //判断是否位回文数 
    string s1=s;
    reverse(s.begin(),s.end());//reverse函数,能够让一个字符串完全倒置 
    if(s!=s1){
        return false; 
    }
    return true;
}
int main(){
    int n,m,w=0;
    cin >> n >> m;
    for(int i=n;i<=m;i++){
        if(cheak(i)){//如果为9进制回文数 
            w++;//个数++ 
        }
    }
    cout << w;//输出 
    return 0;
}

2.贪心算法

贪心算法没什么好讲的......

直接上例题!!

删除字符

(一道很经典的贪心题)

#include<bits/stdc++.h>
using namespace std;
int main(){
    int s,len;
    string n;
    cin >> n >> s;
    len=n.length();
    for(int i=1;i<=s;++i){
        for(int j=0;j<len-1;++j){
            if(n[j]>n[j+1]){
                for(int k=j;k<len-1;++k){
                    n[k]=n[k+1];
                    break;
                }
            }
            len--;
        }
    }
    i=0;
    while(n[1]=='0' && i<len-1) i++;
    while(i<len-1) cout << n[i++];
    cout << endl;
    return 0;   
}

(具体的自己细细品味)

好了这期洛谷周报就是这样,再见!