2 条题解

  • 2
    @ 2024-10-21 12:25:34

    对于打印题最主要的就是找规律,我们观察后能够发现该爱心的打印分为三种情况。 在分析情况之前我们会得知爱心的大小均为7的倍数,所以我们先定义一个阶数num表示爱心是第几阶的,num = n / 7(即如果n = 7,则 num = 1,表示该爱心为1阶的)。 对于每种情况我们会发现:

    1. 第一,我们能够发现从第1行到第num + 1是由两个空格三角形和两个星 三角形/梯形 组成的。星梯形成每行 +4 进行递增。
    2. 第二, 从num + 2 到 num + 1 + (num - 1) * 2 + 1 输出的均为星,输出的数目是第num + 行星数目 + 3。
    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
      @ 2024-11-4 9:19:09

      #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
      上传者