蓝桥杯备考01

发布时间:2024年01月10日

五位长的01串

#include<iostream>
#include<bitset>//二进制
using namespace std;

void func() // 使用进制转化 
{
    for(int i=0;i<32;i++){
        cout<<i%32/16<<i%16/8<<i%8/4<<i%4/2<<i%2<<endl;
    }
}

void dfs(int num, int n, int *a) { //nums是当前枚举的数,n为位数 
//num:表示当前处理的位序号。在开始时,num 是 0,表示我们从二进制序列的最左边(最高位)开始处理。
//n:表示二进制序列的总位数。它用于确定我们需要生成多少位的二进制序列。
    if (num == n) {
        // 打印结果
        for (int i = 0; i < n; i++) {
            cout << a[i];
        }
        cout <<endl;
        return;
    }

    // 将当前位设置为0,继续递归
    a[num] = 0;
    dfs(num + 1, n, a);

    // 将当前位设置为1,继续递归
    a[num] = 1;
    dfs(num + 1, n, a);
}

int main()
{
    //for(int i=0;i<32;i++)
    //    cout << bitset<5>(i) <<endl; //使用bitset 
    int a[5];
    dfs(0,5,a);
}

?数据特征:找max,min,sum

#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

#define N 10005

int a[N];
int n;
int mem[N];
int st[N];
int sum;
int find_max(int *a, int l,int r)
{
	int max;
	if( l == r) max = a[l];
	else if(r - 1 == l)
	{
		if(a[l] < a[r]) max = a[r];
		else max = a[l];
	}
	else 
	{
		int mid = (l + r) / 2;
		int left_max = find_max(a,0,mid);
		int right_max = find_max(a,mid + 1, r);
		
		if(left_max > right_max)
			max = left_max;
		else max = right_max;
	}
	
	return max;
}

int find_min(int *a, int l,int r)
{
	int min;
	if( l == r) min = a[l];
	else if(r - 1 == l)
	{
		if(a[l] < a[r]) min = a[l];
		else min = a[r];
	}
	else 
	{
		int mid = (l + r) / 2;
		int left_max = find_min(a,0,mid);
		int right_max = find_min(a,mid + 1, r);
		
		if(left_max < right_max)
			min = left_max;
		else min = right_max;
	}
	
	return min;
}

int main()
{
	scanf("%d",&n);
	for(int i = 0; i < n; i ++)
	{
		cin>>a[i];
		sum += a[i];	
	}
	sort(a,a + n);
	
	//int res_max = find_max(a,0,n - 1);
	//int res_min = find_min(a,0,n - 1);
	cout<<a[n - 1]<<endl;
	cout<<a[0]<<endl;
	cout<<sum;
	
	return 0;
}

排序

#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

#define N 205

int a[N];
int n;
int mem[N];
int st[N];

// int length = sizeof(numbers) / sizeof(numbers[0]); 本例不建议,因为int a[N]; 
// sort(numbers, numbers + length);  // 对数组进行排序


bool compare(int a, int b) {
    return a < b;
}

int main()
{
	scanf("%d",&n);
	for(int i = 0; i < n; i ++)	scanf("%d",&a[i]);
	
	sort(a, a + n, compare); // 要传参,默认cimpare是a < b,表示升序 
	for(int i = 0; i < n; i ++)
		printf("%d ",a[i]);
	return 0;
}

进制转换

#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

#define N 100

int arr[N];
int n;
int mem[N];
int st[N];
int nums;


int main()
{
	scanf("%d",&n);
	for(int i = 0; i < n; i ++)
	{
		int sum = 0;
		int cnt = 0;
		scanf("%d",&nums);
		while(nums)
		{
			
			int t = nums % 10;

			sum += t * pow(16,cnt);//这里可以让cnt = 1,然后cnt *= 16的,没必要使用pow 
			cnt ++;
			nums /= 10;
		}
		cout<<sum<<endl;
		while(sum)
		{
			 
			cout<<sum % 8;
			sum /= 8;
		}
		cout<<endl;
	}
	


	return 0;
}

查找数

#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

#define N 10005

int a[N];
int n;
int mem[N];
int st[N];
int sum;
int target; 
int find_target(int *a, int l,int r,int target) //二分查找 
{
	int ans;
	if(l < r) 
	{
		int mid = (l + r) / 2;
		if(target == a[mid]) return mid;
		
		else if(target < a[mid]) return find_target(a,0,mid - 1, target);
		else return find_target(a,mid + 1, r, target);
	}
	return -1;
}

int main()
{
	scanf("%d",&n);
	for(int i = 0; i < n; i ++)
	{
		cin>>a[i];
	}
	cin>>target;
	sort(a,a + n);
	for(int i = 0; i < n; i ++) cout<<a[i]<<' ';
	cout<<endl;
	int ans = find_target(a, 0 , n - 1, target);
	
	cout<<ans;
	return 0;
}

10进制转为16进制

#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

typedef long long LL;
#define N 100

int arr[N];
int n;
int mem[N];


int main()
{
	char s[100];
	int cnt;
	cin>>cnt;
	int i = 0;
	if(cnt == 0)
	{
		cout<<'0';
		exit(-1);
	}
	while(cnt)
	{
		int t = cnt % 16;
		if(t < 10)
			s[i] = t + '0';
		else if( t == 10)
			s[i] = 'A';
		else if( t == 11)
			s[i] = 'B';
		else if( t == 12)
			s[i] = 'C';
		else if( t == 13)
			s[i] = 'D';
		else if( t == 14)
			s[i] = 'E';
		else if( t == 15)
			s[i] = 'F';
		else
		{
		}
		cnt /= 16;
		i++;
	}
	for(int j = i - 1; j >= 0 ;j --)
		printf("%c",s[j]);
	
	return 0;
}

文章来源:https://blog.csdn.net/qq_61973247/article/details/135489930
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。