蓝桥杯 基础练习

蓝桥杯 基础练习

BASIC-1 闰年判断
给定一个年份,判断这一年是不是闰年。当以下情况之一满足时,这一年是闰年:
①年份是4的倍数而不是100的倍数;
②年份是400的倍数。

#include<iostream>
using namespace std;
int main()
{
	int year;
	cin>>year;
	if(year%4==0&&year%100!=0||year%400==0)
	cout<<"yes"<<endl;
	else
	cout<<"no"<<endl;
	return 0;
} 

BASIC-2 01字串
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。

由于只有0、1两种字符,可采用循环的方式对其进行遍历,从而获得00000-11111按顺序排列的01字串。

#include<stdio.h>
int main()   
{
    char a[6];
    for(a[0]='0';a[0]<='1';a[0]++)
    for(a[1]='0';a[1]<='1';a[1]++)
   	for(a[2]='0';a[2]<='1';a[2]++)
   	for(a[3]='0';a[3]<='1';a[3]++)
  	for(a[4]='0';a[4]<='1';a[4]++)
  	puts(a);
    return 0;
}

或者,通过对每一行的每个下标的值进行处理。
index为数组下标,每一行以a[4]-a[0]的顺序,将应置为1的数组元素置1,其余为默认元素0.
temp想当于每一行的十进制数,“为获得其二进制数,可采用除2的方式”(相当于十进制转二进制时的方法),从而获得每一行的01字符序列。

#include<iostream>
using namespace std;
int main()
{
	int i,j,n=32;
	int temp;
	for(i=0;i<n;i++)
	{
		int a[5]={0};
		int index=4;
		temp=i;
		while(index>=0)
		{
			a[index]=temp%2;
			index--;
			temp=temp/2;
		}
		for(j=0;j<5;j++)
			cout<<a[j];
		cout<<endl;
	}
	return 0;
} 

BASIC-3 字母图形
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。

这道题容易作,但想拿满分还是有一定难度的,需要考虑的十分全面。 我看了网上大多数方法仅局限于此题的数据规模与约定(1 <= n, m <= 26) 而下述程序不仅满足改题目要求,并且其数据规模的范围更大。

字符数组a是将其按输出顺序排列,便于后续按顺序访问。
当n=5,m=7时,第一行为:ABCDEFG,而第二行为:BABCDEF…
由此可见,第一行从a[0]开始往后m个字母,第二行第一个字符为a[49](相当于i=-1时,j=-1,因为x=j,所以x=-1。因为当x<0时会进行x+=50的操作,所以转到了a[49]处)依次输出a[49]后面字符,(他的后面没有了,所以又回到a[0]了)。
以此类推,第三行为:CBABCDE。按上述方法可求得。
因为获得如下程序。

#include<iostream>
using namespace std;
int main()
{
	int n,m;
	cin>>n>>m;
    char a[50]= {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','Y','X','W','V','U','T','S','R','Q','P','O','N','M','L','K','J','I','H','G','F','E','D','C','B'};
	int i,j,x;
	for(i=0;i>-n;i--)
	{
		for(j=i;j<m+i;j++)
		{
			x=j;
			if(x>49)
				x-=50;
			if(x<0)
				x+=50;
			cout<<a[x]; 
		}
		cout<<endl;
	}
	return 0;
}

持续更新~~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值