1 特殊的正方形
#include<bits/stdc++.h>
using namespace std;
int a[101][101];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i+=2){
//i代表奇数
for(int j=i;j<=n+1-i;j++){
a[i][j]=1;
a[n+1-i][j]=1;
}
//上下两排
for(int j=i;j<=n+1-i;j++){
a[j][i]=1;
a[j][n+1-i]=1;
}
//左右两行
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]==1) putchar('+');
else putchar('.');
}
cout<<endl;
}
return 0;
}
思路一:用二维数组存,然后按上下两行,左右两列去给数组赋值,因为奇偶相间,所以i+=2。最后输出图案。
#include<iostream>
using namespace std;
int m;
int min(int a,int b,int c,int d){
int e=a>b? b:a;
int f=c>d? d:c;
return e>f? f:e;
}
int search(int x,int y){
return min(x,y,m+1-x,m+1-y);
}
int main(){
cin>>m;
for(int i=1;i<=m;i++){
for(int j=1;j<=m;j++){
if(search(i,j)%2==1){
putchar('+');
}
else putchar('.');
}
cout<<'\n';
}
}
思路二:可以用每一个点到四条正方形边的最小距离来判断是‘+’还是‘.’,注意m+1。
2 走楼梯
#include<bits/stdc++.h>
using namespace std;
long long f[55][3];
int main(){
int n;
cin>>n;
f[0][0]=1;
for(int i=0;i<=n;i++){
for(int j=0;j<=2;j++){
f[i+1][0]+=f[i][j];
if(j<2) f[i+2][j+1]+=f[i][j];
}
}
cout<<f[n][0]+f[n][1]+f[n][2];
return 0;
}
思路: 记录只走一步,走一次两步和走两次两步的不同情况,然后相加输出。
3 Alice的德州扑克
#include<iostream>
using namespace std;
int a[6],b[6];
bool Str,Flu,Fou,Ful;
bool isStraight(){
bool flag=true;
for(int i=1;i<5;i++){
if(a[i]!=a[i+1]-1){
flag=false;
break;
}
}
if(flag) return true;
else return false;
}
bool isFlush(){
bool flag=true;
for(int i=1;i<5;i++){
if(b[i]!=b[i+1]){
flag=false;
break;
}
}
if(flag) return true;
else return false;
}
bool isFour(){
if(a[2]==a[3]&&a[3]==a[4]){
if(a[1]==a[2]||a[5]==a[2]){
return true;
}
else return false;
}
else return false;
}
bool isFull(){
if(a[1]==a[2]&&a[4]==a[5]){
if(a[3]==a[2]||a[3]==a[4]){
return true;
}
else return false;
}
else return false;
}
int main(){
for(int i=1;i<=5;i++){
cin>>a[i];
}
for(int i=1;i<=5;i++){
cin>>b[i];
}
Str=isStraight();
Flu=isFlush();
Fou=isFour();
Ful=isFull();
if(Str&&Flu&&a[5]==14) cout<<"ROYAL FLUSH";
else if(Str&&Flu) cout<< "STRAIGHT FLUSH";
else if(Fou) cout<<"FOUR OF A KIND";
else if(Ful) cout<<"FULL HOUSE";
else if(Flu) cout<<"FLUSH";
else if(Str) cout<<"STRAIGHT";
else cout<<"FOLD";
return 0;
}
思路:一道模拟题,只要知道了判断牌型的方法,就可以比较容易地通过。