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;
}