题意;
给出一个n,按要求输出图形。
思路:
模拟输出题。
先用数组存储全部的字符,最后输出。
设长b=13n+19,宽a=4n+5。
(1)先大面积是.,因此先初始化全是。
(2)边缘全是*,因此当x1||xa||y1||yb时,字符为*。
(3)接下来考虑@。
先考虑竖着的情况:
1>整个为竖:
当x>=n2&&x<=3n+4时,字母的第1、2、3、5的y全是@。
每个字母的两边:
n+3
3n+5
4n+7
6n+9
7n+11
9n+13
10n+15
12n+17
2>一半一半:
当x>=n+2&&x<=2n+3&&y10n+15时为@;
当x>=2n+3&&x<=3*n+4&&y12*n+17时为@。
再考虑横着的情况:
F的上中,L的下,5的上中下全是@。
再考虑N:
当x=n+2时,y=n+3;
当x=n+3时,y=n+4;
所以x>=n+2&&x<=3*n+4时,y+1为@。
代码:
#include
using namespace std;
int main(){
int n,x,y;
scanf("%d",&n);
int a=4*n+5,b=13*n+19;
char g[a+1][b+1];
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
if(i==1||j==1||i==a||j==b) g[i][j]='*';
else g[i][j]='.';
}
}
for(x=n+2;x<=3*n+4;x++){
for(y=1;y<=b;y++){
if(y==n+3||y==3*n+5||y==4*n+7||y==7*n+11) g[x][y]='@';
if(x>=n+2&&x<=2*n+3&&y==10*n+15) g[x][y]='@';
if(x>=2*n+3&&x<=3*n+4&&y==12*n+17) g[x][y]='@';
}
}
for(y=4*n+7;y<=6*n+9;y++){
g[n+2][y]='@';
g[2*n+3][y]='@';
}
for(y=10*n+15;y<=12*n+17;y++){
g[n+2][y]='@';
g[2*n+3][y]='@';
g[3*n+4][y]='@';
}
for(y=7*n+11;y<=9*n+13;y++){
g[3*n+4][y]='@';
}
for(x=n+2;x<=3*n+4;x++){
g[x][x+1]='@';
}
for(x=1;x<=a;x++){
for(y=1;y<=b;y++){
printf("%c",g[x][y]);
}
puts("");
}
return 0;
}
题意:
给出a,b,c,x;
你每次可以将b变成a-b,c变成b-c,
问是否能将c变成x。
思路:
找规律推式子即可。
代码:
#include
using namespace std;
int main(){
int a,b,c,x,t;
scanf("%d",&t);
while(t--){
scanf("%d%d%d%d",&a,&b,&c,&x);
if((c==x)||(b-c==x)||((a!=2*b)&&((x-c)%(a-2*b)==0||(x+c-b)%(a-2*b)==0))) puts("Yes");
else puts("No");
}
return 0;
}