前言
??2021年这么快就到来了,仿佛2019年刚刚过去; ??仔细想了一下自己这两年都干了点什么啊,也就参加创新创业大赛了吧,什么大创、三创、青创、挑战杯、互联网+都参加了个遍;但是仔细想想哈,纯技术类的比赛还真的是么有怎么参加,就报名了这个蓝桥杯想着边复习边准备这个比赛; ??咱就是说,一看这些题好像啥都不会,还是写个博客记录一下吧
基础篇
1、数组 排序
#include<iostream>
using namespace std;
int main()
{
short int maxSize;
int temp;
cin >>maxSize;
int group[maxSize];
for(int i = 0;i<maxSize;i++)
{
cin >> group[i];
for(int j=i;j>0;j--)
{
if(group[j]< group[j-1])
{
temp = group[j-1];
group[j-1]=group[j];
group[j]=temp;
}
else
{
break;
}
}
}
for(int i=0;i<maxSize;i++)
cout<<group[i]<<" ";
}
2、16进制转换8进制
#include<iostream>
#include<string.h>
#include <cmath>
#include<stdio.h>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
string hex[n];
string bin[n];
for(int i=0;i<n;i++)
scanf("%s",&hex[i]);
for(int i = 0;i<n;i++)
{
bin[i]="";
for(int j=0;j<hex[i].length();j++)
{
switch(hex[i][j])
{
case '0' : bin[i] += "0000";break;
case '1' : bin[i] += "0001";break;
case '2' : bin[i] += "0010";break;
case '3' : bin[i] += "0011";break;
case '4' : bin[i] += "0100";break;
case '5' : bin[i] += "0101";break;
case '6' : bin[i] += "0110";break;
case '7' : bin[i] += "0111";break;
case '8' : bin[i] += "1000";break;
case '9' : bin[i] += "1001";break;
case 'A' : bin[i] += "1010"; break;
case 'B' : bin[i] += "1011"; break;
case 'C' : bin[i] += "1100"; break;
case 'D' : bin[i] += "1101"; break;
case 'E' : bin[i] += "1110"; break;
case 'F' : bin[i] += "1111"; break;
default:
break;
}
}
if(bin[i].length()%3 == 1)
bin[i] = "00" + bin[i];
else if(bin[i].length()%3 == 2)
bin[i] = "0" + bin[i];
for(int j=0;j<bin[i].length()-3;j+=3)
{
int end = 4*(bin[i][j]-'0')+ 2*(bin[i][j+1]-'0')+bin[i][j+2];
if(end)
cout<<end;
}
cout<<endl;
}
return 0;
}
3、十六进制转换十进制
任何进制转十进制基本上都很简单 例如十六进制的123
12
3
16
=
1
×
1
6
2
+
2
×
1
6
2
+
3
=
16
(
1
×
1
6
1
+
2
)
+
3
=
16
(
16
(
1
)
+
2
)
+
3
123_{16}=1×16^2+2×16^2+3 \\ =16(1×16^1+2)+3\\ =16(16(1)+2)+3
12316?=1×162+2×162+3=16(1×161+2)+3=16(16(1)+2)+3
错在这个unsigned int上面,如果不带这个unsigned,FFFF就会被转换成-1
#include<stdio.h>
#include<iostream>
#include<string>
#include<math.h>
using namespace std;
unsigned int fun(string str){
unsigned int sum=0;
for(int i = 0;str[i]!='\0';i++)
{
if(str[i] >= '0'&&str[i]<='9')
sum = sum*16+str[i]-'0';
else
sum=sum*16+10+str[i]-'A';
}
return sum;
}
int main()
{
string hex;
cin>>hex;
cout<<fun(hex);
return 0;
}
4、十进制转换十六进制
当前的数不断的对16进行求余就行,求余完了再除以16并赋值,直到这个数是0
#include<iostream>
using namespace std;
int main()
{
unsigned int dec;
cin>>dec;
string hex;
if(dec == 0)
cout<<0;
while(dec>0)
{
switch(dec%16)
{
case 0:hex+='0';break;
case 1:hex+='1';break;
case 2:hex+='2';break;
case 3:hex+='3';break;
case 4:hex+='4';break;
case 5:hex+='5';break;
case 6:hex+='6';break;
case 7:hex+='7';break;
case 8:hex+='8';break;
case 9:hex+='9';break;
case 10:hex+='A';break;
case 11:hex+='B';break;
case 12:hex+='C';break;
case 13:hex+='D';break;
case 14:hex+='E';break;
case 15:hex+='F';break;
}
dec/=16;
}
string s(hex.rbegin(),hex.rend());
cout<<s;
return 0;
}
5、特殊回文数
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
unsigned int num;
scanf("%d",&num);
int x,y,z;
for(x=1;x<=9;x++)
for(y=0;y<=9;y++)
for(z=0;z<=9;z++)
if(num ==(2*x+2*y+z))
cout<<x<<y<<z<<y<<x<<endl;
for(x=1;x<=9;x++)
for(y=0;y<=9;y++)
for(z=0;z<=9;z++)
if(num == (2*x+2*y+2*z))
cout<<x<<y<<z<<z<<y<<x<<endl;
return 0;
}
6、回文数
#include<iostream>
using namespace std;
int main()
{
int x,y;
for(x=1;x<=9;x++)
for(y=0;y<=9;y++)
cout<<x<<y<<y<<x<<endl;
return 0;
}
7、 特殊的数字
#include<iostream>
using namespace std;
int main()
{
int x,y,z;
for(x=1;x<=9;x++)
for(y=0;y<=9;y++)
for(z=0;z<=9;z++)
if((x*x*x)+(y*y*y)+(z*z*z) == x*100+y*10+z)
cout<<x<<y<<z<<endl;
return 0;
}
8、杨辉三角形
#include<iostream>
using namespace std;
int main()
{
int yanghui[34][34] = {{1}};
int num;
cin >> num;
for(int row=0;row<num;row++)
{
yanghui[row][0] = 1;
yanghui[row][row]=1;
for(int column=2;column<=row;column++)
yanghui[row][column-1] = yanghui[row-1][column-2] + yanghui[row-1][column-1];
}
for(int row=0;row<num;row++)
{
for(int column=0;column<=row;column++)
cout << yanghui[row][column] << ' ';
cout << endl;
}
return 0;
}
9、查找整数
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int num;
int k;
cin >> num;
int array[num];
for(int i = 0;i < num;i++)
cin >> array[i];
cin >> k;
for(int i = 0;i<num;i++){
if(k == array[i]){
printf("%d\n",i+1);
break;
}
if(i==(num-1))
printf("-1");
}
return 0;
}
10、 数列特征
#include<iostream>
using namespace std;
int main(){
int num;
cin >> num;
int array[num];
for(int i = 0;i < num;i++){
cin >> array[i];
}
int min=array[0];
int max=array[0];
int result=0;
for(int i = 0;i < num;i++){
if(min>array[i])
min = array[i];
if(max<array[i])
max = array[i];
result += array[i];
}
printf("%d\n",max);
printf("%d\n",min);
printf("%d\n",result);
return 0;
}
参考文章
第三题.十六进制转十进制 进制转换 字符处理 判断 第四题:1.十进制转十六进制 ??2.c++ string 实现逆序 第五题:自己写的能过,但是我看了这个文章,觉得做法也不错 基础-特殊回文数
|