蓝桥杯 基础训练

<pre class="cpp" name="code">#include <iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include "algorithm"
#include "queue"
#define INF 100000000
using namespace std;
char h[100002], b[400002], e[400002];
void solve()
{
	int n;
	scanf("%d", &n);
	int i = 0;
	char**  s = (char**)malloc(sizeof(char*)*n);
	char**  m = (char**)malloc(sizeof(char*)*n * 4);
	char**  e = (char**)malloc(sizeof(char*)*n);
	while (i < n)
	{
		s[i] = (char*)malloc(sizeof(char)* 100000);
		m[i] = (char*)malloc(sizeof(char)* 400000);
		e[i] = (char*)malloc(sizeof(char)* 100000);
		scanf("%s", s[i++]);
	}
	for (int i = 0; i < n; i++)
	{
		int k = 0;
		int temp;
		for (int j = strlen(s[i]) - 1; j >= 0; j--)
		{
			if (s[i][j] >= 'A')
				temp = s[i][j] - 'A' + 10;
			else
				temp = s[i][j] - '0';
			while (temp != 0)
			{
				m[i][k++] = (char)temp % 2 + '0';
				temp = temp / 2;

			}

		}
		m[i][k] = '\0';
		//8
		int cnt = 1;
		int l = 0;
		int x = 0;
		for (int j = 0; j<strlen(m[i]); j++)
		{
			x += (m[i][j] - '0') * cnt;
			if (cnt == 4 || j == strlen(m[i]) - 1)
			{

				e[i][l++] = x + '0';
				cnt = 1;
				x = 0;
			}
			else
			{

				cnt *= 2;
			}
		}
		e[i][l] = '\0';

	}
	for (int i = 0; i < n; i++)
	{
		for (int j = strlen(e[i]) - 1; j >= 0; j--)
		{
			printf("%c", e[i][j]);
		}
		puts("\n");
	}
}
void solve2()
{
	int n;
	scanf("%d", &n);
	int i = 0;
	char s[100002], c[400002], e[100002];
	while (i < n)
	{

		scanf("%s", s);
		int temp;
		int k = 0;
		for (int j = strlen(s) - 1; j >= 0; j--)
		{
			if (s[j] >= 'A')
				temp = s[j] - 'A' + 10;
			else
				temp = s[j] - '0';
			for (int m = 0; m < 4; m++)
			{
				c[k++] = temp % 2 + '0';
				temp /= 2;
			}

		}
		c[k] = '\0';
		int cnt = 1;
		int x = 0;
		int l = 0;
		for (int j = 0; j<strlen(c); j++)
		{
			x += (c[j] - '0') * cnt;
			if (cnt == 4 || j == strlen(c) - 1)
			{

				e[l++] = x + '0';
				cnt = 1;
				x = 0;
			}
			else
			{

				cnt *= 2;
			}
		}
		e[l] = '\0';
		l--;
		while (l >= 0 && e[l] == '0') l--;//去掉前导0
		if (l<0) printf("0");
		for (; l >= 0; l--)
		{

			printf("%c", e[l]);


		}puts("\n");
		i++;
	}



}

int correct(int argc, char*argv[]) {
	// freopen("E:\\in.txt","r",stdin);
	// freopen("E:\\out.txt","w",stdout);
	int n;
	scanf("%d", &n);
	while (n--)
	{
		scanf("%s", h);
		int i, len = 0;
		for (i = strlen(h) - 1; i >= 0; i--)//先把16进制化成二进制
		{
			int v;
			if (h[i] >= '0'&&h[i] <= '9') v = h[i] - '0';
			else v = h[i] - 'A' + 10;
			for (int j = 0; j<4; j++)
			{
				b[len++] = v % 2 + '0';
				v /= 2;
			}
		}
		b[len] = '\0';
		//printf("%s\n",b);
		int x = 0, cnt = 1;
		int l = 0;
		for (i = 0; i<len; i++)
		{
			if (cnt == 4 || i == len - 1)//每三位二进制转成一位8进制,最后不足三位补0
			{
				x = cnt*(b[i] - '0') + x;
				cnt = 1;
				// printf("%d %d\n",x,i);
				e[l++] = x + '0';
				x = 0;
			}
			else
			{
				x = cnt*(b[i] - '0') + x;
				cnt *= 2;
			}
		}
		i = l - 1;
		while (i >= 0 && e[i] == '0') i--;//去掉前导0
		if (i<0) printf("0");
		for (; i >= 0; i--)
		{
			printf("%c", e[i]);
		}
		printf("\n");
	}
	return 0;
}
int main()
{
	freopen("in.txt", "r", stdin);
	solve2();
	return 0;
}

2、给定圆的半径r,求圆的面积。
 
#include<stdio.h>
#include<stdlib.h>
#define PI  3.14159265358979323//宏定义
int main()
{
	int r;
	double s;

	scanf("%d", &r);
	printf("%.7f", (PI*r*r));
	return 0;
}

3、序列求和

#include<stdio.h>
#include<stdlib.h>
long long solve(long long n)
{
	return (1 + n)*n / 2;
}
int main()
{
	long long n;
	long long result;
	scanf("%I64d", &n);
	result = solve(n);
	printf("%I64d", result);
	return 0;
}

大数采用long long %I64输入输出,关注输入数据的范围

4、排序

void sort(int a[],int n)
{
	int j;
	for (int i = 0; i < n-1; i++)
	{
		int k = i;
		for (j = i+1; j < n; j++)
		{
			
			if (a[j] < a[k])
			{
				k = j;
			}
		}
		int temp;
		temp = a[k];
		a[k] = a[i];
		a[i] = temp;
	}
}
#include<stdio.h>
#include<stdlib.h>
void solve()
{
	int n;
	//int a[100];
	int i = 0;

	scanf("%d", &n);
	int *a = (int*)malloc(sizeof(int)*n);//动态分配内存
	while (i < n)
	{
		scanf("%d", &a[i++]);

	}

	for (int i = 0; i < n-1; i++)
	{
		int temp = i;
		int k;
		for(int j = i; j < n;j++)
		{
			
			if (a[j]<a[temp])
				temp = j;
		}
		k = a[i];
		a[i] = a[temp];
		a[temp] = k;
	}
	for (int i = 0; i < n; i++)
	{
		printf("%d", a[i]);
	}
}
int main()
{
	freopen("in.txt", "r", stdin);
	solve();
	return 0;
}


4、10进制-》16进制

/*问题描述

  十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,
  所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
   给出一个非负整数,将它表示成十六进制的形式。

输入格式

  输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647

输出格式

  输出这个整数的16进制表示

样例输入

30

样例输出

1E
*/
#include<cstdio>
#include<iostream>
#include<string.h>
void solve1()
{
	char p[100000];
	int n;
	scanf("%d", &n);
	int i = 0;
	if (n == 0)//注意临界条件
	{
		printf("0");
		return;
	}
		
	while (n != 0)
	{
		p[i++] = (n % 16>=10)?(n%16-10+'A'):(n%16+'0');
		n = n / 16;
	}
	i--;
	while (i >= 0)
	{
		printf("%c", p[i--]);
	}
	
}


5、进制转换

<div>/*问题描述</div><div>
</div><div>  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
   注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。</div><div>
</div><div>样例输入</div><div>
</div><div>FFFF</div><div>
</div><div>样例输出</div><div>
</div><div>65535
*/</div>
<div>#include<cstdio>
#include<iostream>
#include<string.h>
void wrong()
{
 char p[9];
 long long sum = 0;
 scanf("%s", p);
 int cnt = 1;
 for (int i = strlen(p) - 1; i >= 0; i--)
 {
  if (p[i] <= '9'&& p[i] >= '0')
   sum += cnt*(p[i] - '0');
  else
   sum += cnt*(p[i] - 'A' + 10);
  cnt *= 16;
 }
 printf("%lld", sum);
}
void right()
{
 char p[9];
 long long sum = 0;
 scanf("%s", p);</div><div>
</div><div> for (int i = 0;i<= strlen(p) - 1; i++)
 {
  if (p[i] <= '9'&& p[i] >= '0')
   sum = sum*16+(p[i] - '0');
  else
   sum = sum*16+(p[i] - 'A' + 10);
  
 }
 printf("%lld", sum);
}
int main()
{
 freopen("input.txt", "r", stdin);
 right();
 return 0;
}</div>

6、回文数生成

#include<cstdio>
#include<iostream>
#include<string.h>
/*问题描述

123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。

输入格式

输入一行,包含一个正整数n。

输出格式

按从小到大的顺序输出满足条件的整数,每个整数占一行。

样例输入

52

样例输出

899998
989989
998899

数据规模和约定

1 <= n <= 54。*/
// 基础练习 回文数   
#include <stdio.h>
#include <string.h> 
int right()
{
	int i = 0, j = 0, len = 0;
	char buf[5];  	//枚举 
	for (i = 1000; i < 10000; ++i)
	{
		sprintf(buf, "%d", i);
		len = strlen(buf);
		for (j = 0; j < len / 2; ++j)
		{
			if (buf[j] != buf[len - 1 - j])//非回文 跳出 	
			{
				break;
			}
		}
		if (j == len / 2)//满足条件 	
		{
			printf("%dn", i);
		}
	}
	return 0;
}

void sum(int n, int num,int *s)
{
	if (num * 9 < n || n<num)
		return;
	if (num == 1)
	{
		s[0] = n;
		printf("%d", n);
		return;
	}

	//int *s = (int*)malloc(sizeof(int)*num);
	if (num % 2 == 0)
	{
		for (int i = 0; i < 10; i++)
		{
			s[num / 2] = i;
			if ((n - 2 * i)%2==0)
			{
				sum((n - 2 * i) , num - 2, s);
				puts("\n");
			}
			
		
		}
	}
	else
	{
		for (int i = 0; i < 10; i++)
		{
			s[num / 2] = i;
			if ((n - i) % 2 == 0)
			{
				sum((n - i) , num -1, s);
				puts("\n");
			}
		}
	}
}

void easy(int n)
{

	char a[7];
	bool check = true;
	int s = 0;
	for (int i = 10000; i < 1000000; i++)//遍历而不是生成
	{
		s = 0;//循环变量的初始化
		check = true;
		sprintf(a, "%d", i);
		for (int j = 0; j < strlen(a); j++)
		{
			if (a[j] != a[strlen(a) - 1 - j])
				check = false;
			s += a[j]-'0';
		}
		if (check == true &&s == n)
			printf("%d\n", i);
	}
}
void solve()
{
	int n;
	scanf("%d", &n);
	easy(n);
	
}
int main()
{
	freopen("input.txt", "r", stdin);
	solve();
	return 0;
}


7、四位十进制回文数生成

#include<stdio.h>
#include<stdlib.h>
void solve()
{
	for (int i = 1000; i < 10000; i++)
	{
		char s[5];
		sprintf(s, "%d", i);
		int j = 0;
		for (; j < 2; j++)
		{
			if (s[j] != s[3 - j])
				break;
		}
		if (j == 2)
			printf("%d\n", i);
	}
}
int main()
{
	solve();
	return 0;
}

8、杨辉三角

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void solve()
{
	int n;
	scanf("%d", &n);
	int c[50] = {0,1,0};
	int p[50];

	for (int i = 1; i <= n; i++)
	{
		p[0] = 0;//p[0] = 0是结束符
		int j;//确定需要变量的个数
		for (j = 1; j < i + 1;j++)
		{
			p[j] = c[j - 1] + c[j];
			printf("%d ", p[j]);
		}
		p[j++] = 0;
		
		printf("\n");
		for (int k = 0; k <= i + 2; k++)
		{
			c[k] = p[k];
		}
	}

	
}
int main()
{
	//freopen("input.txt", "r", stdin);
	while (true)
	{
solve(); 
	}
	
	return 0;
}


8、整数查找

/*问题描述


给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。

输入格式


第一行包含一个整数n。

第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。

第三行包含一个整数a,为待查找的数。

输出格式

如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。 

样例输入

6
 1 9 4 8 3 9
 9 

样例输出

2 

数据规模与约定

1 <= n <= 1000。*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void solve()
{
	int n;
	scanf("%d", &n);
	int m;
	int a[1001];

	for (int i = 1; i <= n; i++)
	{
		scanf("%d", &a[i]);
	}
	scanf("%d", &m);
	int i;
	for (i = 1; i <= n; i++)//循环结束的条件,等号的选取
	{
		if (a[i] == m)
		{
			printf("%d", i);
			break;
		}
		
	}
	if (i == n+1)
		printf("-1");
}
int main()
{
	freopen("input.txt", "r", stdin);
	//while (true)
	{
solve(); 
	}
	
	return 0;
}

9、数组特征

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
void solve()
{
	int n;
	scanf("%d", &n);
	int m;
	int a[10001];

	for (int i = 1; i <= n; i++)
	{
		scanf("%d", &a[i]);
	}
	int i,max = a[1],min = a[1],j,k,temp,sum = 0;//变量初始化
	for (i = 1; i <= n; i++)
	{
		if (max < a[i])
			max = a[i];
		if (min>a[i])
			min = a[i];
		sum += a[i];
	}
	cout << max << endl;
	cout << min << endl;
	cout << sum << endl;
}
int main()
{
	freopen("input.txt", "r", stdin);
	//while (true)
	{
solve(); 
	}
	
	return 0;
}

10、字母图形

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
void solve()
{
	int n,m;
	scanf("%d %d", &n,&m);

	char a[26];
	char b[26];
	char c[26];
	char *pre, *cur;
	for (int i = 0; i < m; i++)
	{
		a[i] = 'A' + i;
	}
	a[m] = 0;
	cout<<a<<endl;
	pre = a;
	for (int i = 0; i < n-1; i++)
	{
		b[0] = 'B' + i;
		b[1] = 0;
		strcat(b, a);
		b[m] = 0;
		strcpy(a, b);
		cout << b << endl;
	}
	
}
int main()
{
	freopen("input.txt", "r", stdin);
	//while (true)
	{
solve(); 
	}
	
	return 0;
}


11、01字符串

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
void solve()
{
	char pre[6] = "00000";
	char cur[6] ="00000";
	cout << cur << endl;
	while (strcmp(cur, "11111") != 0)
	{
		if (pre[4] == '0')
			cur[4] = '1';
		else
		{
			int i;
			for (i = 4; i >= 0; i--)
			{
				if (pre[i] == '1')
					cur[i] = '0';
				else
					break;//连续
			}
			cur[i] = '1';
		}
		cout << cur << endl;
		strcpy(pre, cur);
	}
}
int main()
{
	freopen("input.txt", "r", stdin);
	//while (true)
	{
solve(); 
	}
	
	return 0;
}


12、闰年

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
void solve()
{
	int  n;
	scanf("%d", &n);
	if (n % 4 == 0 && n % 100 != 0)
		cout << "yes";
	else if (n % 400 == 0)
		cout << "yes";
	else
		cout << "no";
}
int main()
{
	//freopen("input.txt", "r", stdin);
	//while (true)
	{
		solve(); 
	}
	
	return 0;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值