进制转换与贪心算法
分享一下关于进制转换和贪心算法的笔记
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;
}
(具体的自己细细品味)