蓝桥刷题小结

蓝桥刷题小结

题意:

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

标签:

回文数+求各位数字之和

#include <iostream>
#include <algorithm>

using namespace std;
int n;

bool check(int x)
{
	int backup=x;
	int t=0;
	int sum=0;
	while(x/10)
	{
		sum+=x%10;
		t=t*10+x%10;
		x/=10;
	}
	t=t*10+x;
	sum+=x;
	
	if(backup==t && sum==n)	return true;
	else return false;
}

int main()
{
	cin>>n;
	
	for(int i=10000;i<999999;i++)
	{
		if(check(i))
		{
			printf("%d\n",i);
		}
	}
	
	return 0;
	
}

水仙花数:

问题所在:求个位的时候脑子突然短路了,用num%100,一直得到错误的答案。余几得几。

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
	for(int num=100;num<1000;num++)
	{
		int bai=num/100;
		int shi=(num-bai*100)/10;
		int ge=num%10;  
		if(bai*bai*bai+shi*shi*shi+ge*ge*ge==num) cout<<num<<endl;
	}
	
	return 0;
}

字母图形:

利用字母可以组成一些美丽的图形,下面给出了一个例子:

ABCDEFG

BABCDEF

CBABCDE

DCBABCD

EDCBABC

这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。

错误点:

1.上三角的差计算错误

2.纵坐标没有考虑边界情况

#include <iostream>
#include <algorithm>
#include <cstring>


using namespace std;

const int N=30;
char str[N][N];

int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		for(int j=i+1;j<m;j++)
		{
			str[i][j]='A'+(j-i);
		}
	}
	
	for(int i=0;i<n;i++)
	{
		for(int j=min(i,m-1);j>=0;j--)
		{
			str[i][j]='A'+(i-j);
		}
	}
	
	for(int i=0;i<n;i++)
		cout<<str[i]<<endl;
			
		
	return 0;
}

01字串

问题描述

对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:

00000

00001

00010

00011

00100

请按从小到大的顺序输出这32种01串。

困难:一直没想好用什么数据结构,其实就用字符就可以,模拟二进制的加法过程,就可以得到所有结果。

#include <iostream>

using namespace std;
int main()
{
	char a[6]={'0','0','0','0','0','\0'};
	for(int i=0;i<32;i++)
	{
		cout<<a<<endl;
		a[4]+=1;
		for(int j=4;j>=0;j--)
		{
			if(a[j]=='2')
			{
				a[j-1]+=1;
				a[j]='0';
			}
			
		}
	}
	return 0;
}
发布了96 篇原创文章 · 获赞 9 · 访问量 1876

猜你喜欢

转载自blog.csdn.net/qq_40905284/article/details/105153210