两道经典类型题

其实很简单,但是不知道为啥卡了我思维半天,想通了就豁然开朗(状态不太行

小蒜想让你根据参数,画出一个他想要的矩形。

输入格式

输入一行,包括四个参数:前两个参数为整数,依次代表矩形的高和宽(高不少于 3

3 行不多于 10

10 行,宽不少于 5

5 列不多于 10

10 列);第三个参数是一个字符,表示用来画图的矩形符号;第四个参数为 1

1 或 0

0,0

0 代表空心,1

1 代表实心。

输出格式

输出画出的图形。

小蒜想让你根据参数,画出一个他想要的矩形。

样例输入

1
7 7 @ 0

样例输出

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
10

【样例输出】

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