蓝桥刷题小结
题意:
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;
}