2020蓝桥杯训练赛(二)

C 九数分三组

1~9的数字可以组成3个3位数,设为:A,B,C, 现在要求满足如下关系:

B = 2 * A

C = 3 * A

请你写出A的所有可能答案,数字间用空格分开,数字按升序排列。

注意:只提交A的值,严格按照格式要求输出。

解题思路

枚举遍历,满足要求的A只会在123—333范围内,只要检查一下A情况下,B,C是否全部符合题意,这里我用到了数组。重点是要按照格式输出!!!!!

代码

#include <iostream>
#include<cstring>
#include<algorithm> 
using namespace std;
int mn[10];
int judge(int i,int b,int c){
	for(int d=1;d<=9;d++){
		mn[d]=0;
	}
	mn[(i%10)]=1;
	mn[((i/10)%10)]=1;
	mn[(i/100)]=1;
	mn[(b%10)]=1;
	mn[((b/10)%10)]=1;
	mn[(b/100)]=1;
	mn[(c%10)]=1;
	mn[((c/10)%10)]=1;
	mn[(c/100)]=1;
	for(int d=1;d<=9;d++){
		if(mn[d]==0) return 1;
	}
	return 0;
}
int main(){
	
	for(int i=123;i<=333;i++){
		int b=2*i;
		int c=3*i;
		if(judge(i,b,c)==0) cout<<i<<" ";
	}
    cout<<endl;
	return 0;
}

E 手链样式

小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙。

他想用它们串成一圈作为手链,送给女朋友。

现在小明想知道:如果小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙。

他想用它们串成一圈作为手链,送给女朋友。

现在小明想知道:如果考虑手链可以随意转动或翻转,一共可以有多少不同的组合样式呢?

请你提交该整数。不要填写任何多余的内容或说明性的文字。

解题思路

这题考排序的种类多少,首先,先把12颗珠子看成不一样的,不考虑手链可以随意转动或翻转,有12!的可能;现在将珠子换成题中3种珠子,将12!个可能除于(3! * 4! * 5!);现在考虑随意转动,每一种唯一的可能都会出现12次(转12次为1圈),所以将前面的12!/(3! * 4! * 5!)再除12,排除这种可能;现在考虑翻转,但在考虑翻转之前,对称在前面只出现了一次,所以不需要考虑翻转,所以,(12!/(3! * 4! * 5!)/12)+30,翻转后为:((12!/(3! * 4! * 5!)/12)+30)/2;结果出来了。直接输出结果就行。

G 打印大X

小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。 为了便于比对空格,所有的空白位置都以句点符来代替。

要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0<m<n, 3<n<1000, 保证n是奇数)要求输出一个大X

例如,用户输入:

3 9

程序应该输出:

.***…***.

…***.***…

…*****…

…***…

…*****…

…***.***…

.***…***.

解题思路

直接开一个n行m列的数组,两种情况下,数组内容为"*":i<=j并且(j-i)<a(左上到右下宽为a的一笔);(n-i+1)<=j并且(j-n+i-1)<a(右上到左下宽为a的一笔),边赋值边打印。

代码

#include <iostream>
#include<cstring>
#include<algorithm> 
using namespace std;
char s[1007][1007];
int main(){
	int a,b;
	cin>>a>>b;
	int n=0,m=0;
	n=b;
	m=a+2*(b/2);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(i<=j&&(j-i)<a||(n-i+1)<=j&&(j-n+i-1)<a){
				s[i][j]='*'; 
				cout<<s[i][j];
			}
			else{
				s[i][j]='.';
				cout<<s[i][j];
			}
		}
		cout<<endl;
	}
	return 0;
}
发布了36 篇原创文章 · 获赞 1 · 访问量 1199

猜你喜欢

转载自blog.csdn.net/atnanajiang/article/details/104641787