01字串
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
#include<bits/stdc++.h>
using namespace std;
#define pi 3.14159265358979323
typedef long long ll;
string ch(int n){
string s="";
while(n){
s+=(n%2+'0');
n/=2;
}
return s;
}
int main(){
string s;
for(int i=0;i<32;i++){
s="";
s+=ch(i);
int n=ch(i).size();
for(int i=1;i<=5-n;i++){
s+='0';
}
reverse(s.begin(),s.end());
cout<<s<<endl;
}
return 0;
}
字母图形
样例输入
5 7
样例输出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
#include<bits/stdc++.h>
using namespace std;
#define pi 3.14159265358979323
typedef long long ll;
char a[28][28];
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=26;i++) a[i][i]='A';
for(int i=1;i<=26;i++){
for(int j=i+1;j<=26;j++) a[i][j]=a[i][j-1]+1;
for(int k=i-1;k>=1;k--) a[i][k]=a[i][k+1]+1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
cout<<a[i][j];cout<<endl;
}
return 0;
}
数列特征
#include<bits/stdc++.h>
using namespace std;
#define pi 3.14159265358979323
#define inf 0x3f3f3f3f
typedef long long ll;
int a[10005];
int main(){
int n,x,_min=inf,_max=-inf,sum=0;
cin>>n;
for(int i=0;i<n;i++) {
cin>>x;sum+=x;
if(x<_min) _min=x;
if(x>_max) _max=x;
}
cout<<_max<<endl<<_min<<endl<<sum<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define pi 3.14159265358979323
#define inf 0x3f3f3f3f
typedef long long ll;
int b[10001];
int main(){
memset(b,-1,sizeof(b));
int n,m,x;
cin>>n;
for(int i=1;i<=n;i++) {
cin>>x;
if(b[x]==-1) b[x]=i;
}
cin>>m;
cout<<b[m]<<endl;
return 0;
}
杨辉三角形
#include<bits/stdc++.h>
using namespace std;
int a[35][35];
int main(){
memset(a,0,sizeof(a));
for(int i=1;i<=34;i++) a[i][1]=1;
for(int i=2;i<=34;i++){
for(int j=2;j<=i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
int n;
cin>>n;
for(int i=1;i<=n;i++){
cout<<a[i][1];
for(int j=2;j<=i;j++)
cout<<' '<<a[i][j];cout<<endl;
}
return 0;
}
特殊回文数
#include<bits/stdc++.h>
using namespace std;
int sum;
string ch(int n){
sum = 0;
string s="";
while(n){
sum += n%10;
s+=(n%10+'0');
n/=10;
}
return s;
}
int main(){
int n;
cin>>n;
for(int i=10000;i<=999999;i++){
string s=ch(i);
string tem=s;
reverse(s.begin(),s.end());
if(tem == s && sum == n) cout<<tem<<endl;
}
return 0;
}
十进制转十六进制 注意特判0
#include<bits/stdc++.h>
using namespace std;
string ch(int n){
string s="";
while(n){
int tem = n%16;
if(tem>=10) s+=(tem-10+'A');
else s+=(tem+'0');
n/=16;
}
reverse(s.begin(),s.end());
return s;
}
int main(){
int n;
while(cin>>n){
if(n) cout<<ch(n)<<endl;
else cout<<'0'<<endl;
}
return 0;
}
十六进制转十进制 注意long long
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ch(string s){
ll n=0;
reverse(s.begin(),s.end());
int l=s.length();
for(int i=0;i<l;i++){
if(s[i]>='0' && s[i]<='9'){
n+=(s[i]-'0')*pow(16,i);
}else{
n+=(s[i]-'A'+10)*pow(16,i);
}
}
return n;
}
int main(){
string s;
cin>>s;
cout<<ch(s)<<endl;
return 0;
}
十六进制转八进制 注意十六进制位数大不能转十进制再转八进制
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
map<char,string>mp1;
map<string,string>mp2;
string c(int n){
string s="";
while(n){
s+=(n%2+'0');
n/=2;
}
while(s.length()<=3){
s+='0';
}
reverse(s.begin(),s.end());
return s;
}
string ch(string s){
string ans="";
string tem="";
if(s.length()%3==1) s="00"+s;
else if(s.length()%3==2) s="0"+s;
//cout<<s<<endl;//12 000010010
for(int i=0;i<s.length();i++){
tem+=s[i];if((i+1)%3==0){
ans+=mp2[tem]; tem="";
}
}
return ans;
}
int main(){
for(int i=0;i<=15;i++){
if(i<10) mp1[i+'0']=c(i);
else mp1[i-10+'A']=c(i);
}
mp2["000"]="0";mp2["001"]="1";
mp2["010"]="2";mp2["011"]="3";
mp2["100"]="4";mp2["101"]="5";
mp2["110"]="6";mp2["111"]="7";
string s;
int n;
cin>>n;
while(n--){
string tem="";
cin>>s;
for(int i=0;i<s.length();i++){
tem+=mp1[s[i]];
}
string s=ch(tem);
if(s[0]=='0'){
for(int i=1;i<s.length();i++)
cout<<s[i];cout<<endl;
}else cout<<s<<endl;
}
return 0;
}