2 条题解
-
2
对于打印题最主要的就是找规律,我们观察后能够发现该爱心的打印分为三种情况。 在分析情况之前我们会得知爱心的大小均为7的倍数,所以我们先定义一个阶数num表示爱心是第几阶的,num = n / 7(即如果n = 7,则 num = 1,表示该爱心为1阶的)。 对于每种情况我们会发现:
- 第一,我们能够发现从第1行到第num + 1是由两个空格三角形和两个星 三角形/梯形 组成的。星梯形成每行 +4 进行递增。
- 第二, 从num + 2 到 num + 1 + (num - 1) * 2 + 1 输出的均为星,输出的数目是第num + 行星数目 + 3。
- 第三, 剩余的部分,即从num + 1 + (num - 1) * 2 + 1 + 1行到第 n 行, 输出一个三角形空格 和 一个倒置的三角形星。需要注意的是最后一行是一个星,在循环遍历每一行的时候需要特判该行。
#include<stdio.h> int main() { int t; scanf("%d", &t); while (t--) { int n; scanf("%d", &n); int num = n / 7, cnt = (1 + (num - 1) * 4), cnt2 = 0, flag = 0, flag2 = 0; for(int i = 1; i <= n; i++) { if(i <= num + 1) {//第一种 printf(" "); for(int j = 1; j <= (num - i + 1) * 2; j++) { printf(" "); } for (int j = 1; j <= cnt; j++) { printf("*"); } for(int j = 1; j <= (num - i + 1) * 4 + 1; j++) { printf(" "); } for (int j = 1; j <= cnt; j++) { printf("*"); } cnt += 4; } else if (i <= num + 1 + (num - 1) * 2 + 1) {//第二种 if (flag == 0) { cnt = (cnt - 4) * 2; cnt += 3; flag++; } for(int j = 1; j <= cnt; j++) { printf("*"); } } else {//第三种 if (flag2 == 0) { cnt2++; cnt-=2; flag2++; } else { cnt -= 4; cnt2 += 2; } if (cnt < 0) { cnt = 1; cnt2--; } for(int j = 1; j <= cnt2; j++) { printf(" "); } for(int j = 1; j <= cnt; j++) { printf("*"); } } printf("\n"); } } return 0; }
-
0
#include<iostream> #include<algorithm> #include<string> #include<string.h> #include<string.h> #include<cmath> using namespace std;; void love(int n) { int m=n/7; //shang for(int i=1;i<=m+1;i++){ for(int j=1;j<=1+2*(m+1-i);j++){ cout << " "; } for(int j=1;j<=1+4*(m-1+i-1);j++){//lie_number cout << "" ; } for(int j=1;j<=1+2(m+1-i);j++){ cout << " "; } for(int j=1;j<=2*(m+1-i);j++){ cout << " "; } for(int j=1;j<=1+4*(m-1+i-1);j++){//lie_number cout << "" ; } cout << '\n' ; } //zhong for(int i=1;i<=2m-1;i++) { for(int j=1;j<=2*(1+4*(2m-1))+3;j++){ cout << "" ; } cout << '\n' ; } //xia int k=2*(1+4*(2m-1))+1; for(int i=1;i<=4m-1;i++){ for(int j=1;j<=2i-1;j++){ cout << " "; } for(int j=k;j>=1;j--){ cout << "" ; } k-=4; cout << '\n' ; } //finall for(int i=1;i<=8m-2;i++){ cout << " "; } cout << "" ;
}
int main() { int t,n; cin >> t; while(t--) { cin >> n; love(n); cout << '\n' ; } return 0; }
- 1
信息
- ID
- 1022
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 31
- 已通过
- 16
- 上传者