P1036 跟奥巴马一起编程

转跳点:🐏

 

1036 跟奥巴马一起编程 (15分)
 

美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014 年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!

输入格式:

输入在一行中给出正方形边长 N(3)和组成正方形边的某种字符 C,间隔一个空格。

输出格式:

输出由给定字符 C 画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的 50%(四舍五入取整)。

输入样例:

10 a
 

输出样例:

aaaaaaaaaa
a        a
a        a
a        a
aaaaaaaaaa

 

  这道题只需要注意一点就好了,题目中的这句话 “我们输出的行数实际上是列数的 50%”,记住行数是列数的一半。但这又涉及到另一个问题,当列数为奇数的时候存在四舍五入的情况,C语言整数相除是向0取整的,所以我们需要一个式子来判断小数是不是大于5。那么这个式子怎么写呢?

  (m+n/2)/ n, 为什么呢,让我们先思考一下,为什么是如何判断小数部分是不是大于0.5。

  其实很简单,设n为除数,m为被除数,如果 m%n > n / 2 的时候求出来的小数绝对大于等于0.5,因为余数的可能为n,所以0~9能乘出的数据就被分成n份当其得出的余数大于n/2时,就会用到n*n/2以上的数据。既然如此那么我们给数据加上n/2的大小,如果原数据大于除数的一半,那么加上n/2之后就会上升到另一个数量级,如果小于n,那么数量级不变。

  这道题 n = 2 所以啊,原始就变形为 M+1)/ 2 

 

其他就没有什么了

AC代码如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main(void)
 5 {
 6     int n;
 7     char ch;
 8 
 9     scanf("%d %c", &n, &ch);
10 
11     for (int i = 0; i < (n + 1) / 2; i++)
12     {
13         for (int j = 0; j < n; j++)
14         {
15             if (0 == i || ((n + 1) / 2) - 1 == i)
16             { //第一行和最后一行全部输出
17                 printf("%c", ch);
18                 continue;
19             }
20             if (0 == j || n - 1 == j)
21             { //其他行的第一位和最后一位
22                 printf("%c", ch);
23                 continue;
24             }
25             printf(" ");
26         }
27         printf("\n");
28     }
29 }

  PTA不易,诸君共勉!

posted @ 2020-01-21 00:04  秦_殇  阅读(222)  评论(0编辑  收藏  举报