其实很简单,但是不知道为啥卡了我思维半天,想通了就豁然开朗(状态不太行
小蒜想让你根据参数,画出一个他想要的矩形。
输入格式
输入一行,包括四个参数:前两个参数为整数,依次代表矩形的高和宽(高不少于 3
3 行不多于 10
10 行,宽不少于 5
5 列不多于 10
10 列);第三个参数是一个字符,表示用来画图的矩形符号;第四个参数为 1
1 或 0
0,0
0 代表空心,1
1 代表实心。
输出格式
输出画出的图形。
小蒜想让你根据参数,画出一个他想要的矩形。
样例输入
样例输出
1 2 3 4 5 6 7
| @@@@@@@ @ @ @ @ @ @ @ @ @ @ @@@@@@@
|
【解题思路】
思路1:按行输出
输入高h,宽w,字符c,是否实心x
内部字符c_in有两种,若是实心图形,内部字符是c,若是空心图形,内部字符是’ ‘(空格)
上下两行,需要输出w个c,再输出换行。
中间的h - 2行,需要先输出一个c,再输出w - 2个c_in,再输出一个c,再输出换行。
思路2:遍历矩阵
循环嵌套输出整个矩阵
针对每个位置进行判断,如果符合条件,则输出*,否则输出’ ‘。
条件为:
如果是外圈,即行号为1或h,或列号为1或w,那么输出*
如果不是外圈,是内部位置,那么判断是否是实心,是实心输出*,否则输出’ ’
1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include<stdio.h> int main() { int h,w,x; char c; scanf("%d %d %c %d",&h,&w,&c,&x); char c_in = x == 1 ? c : ' '; for(int i = 0;i < w;i++) printf("%c",c); printf("\n"); for(int i = 0;i < h - 2;i++) { printf("%c",c); for(int j = 0;j < w - 2;j++) printf("%c",c_in); printf("%c\n",c); } for(int i = 0;i < w;i++) { printf("%c",c); } printf("\n"); return 0; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| 2.#include<stdio.h> int main() { int h,w,x; char c; scanf("%d %d %c %d",&h,&w,&c,&x); for(int i = 1;i <= h;i++) { for(int j = 1;j <= w;j++) { if(i == 1 || i == h || j == 1 || j == w) printf("%c",c); else { if( x == 1) printf("%c",c); else printf(" "); } } printf("\n"); } return 0; }
|
【题目描述】
蒜头君有一个正整数 n,他想求第 n小的质数。
【输入格式】
一个不超过 10000的正整数 n。
【输出格式】
第 n 小的质数。
输出时每行末尾的多余空格,不影响答案正确性
【样例输入】
【样例输出】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include<stdio.h> #include<math.h> int isprime(int m) { //判断一个数是不是质数 int i; for(i=2; i<=sqrt(m); i++) if(m%i==0) return 0; return 1; } int main() { int n,sum=0;//定义第n小,质数累加 scanf("%d",&n); for(int i=2;;i++) { if( isprime(i)==1) sum++; if(sum==n) //等于第n小的时候输出 { printf("%d\n",i); break; } } return 0; }
|