《算法笔记》3.3小节

  图形输出看似简单,但是我是没怎么搞懂,有一些参考了别人的代买。虽然只有四个问题,但是真的把我搞糊涂了。

问题A:

题目描述

输入一个高度h,输出一个高为h,上底边为h的梯形。

输入

一个整数h(1<=h<=1000)。

输出

h所对应的梯形。

样例输入

5
#include<string>
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    int h;
    while(scanf("%d",&h)!=-1){
    int n=h+(h-1)*2;
    for(int i=0;i<h;i++){
        string h1(n-h-i*2,' ');
        string h2(h+i*2,'*');
        cout<<h1<<h2<<endl;
    }
}
    return 0;
}

问题B:

题目描述

Given any string of N (>=5) characters, you are asked to form the characters into the shape of U. For example, "helloworld" can be printed as:

h  d

e  l

l  r

lowo

That is, the characters must be printed in the original order, starting top-down from the left vertical line with n1 characters, then left to right along the bottom line with n2 characters, and finally bottom-up along the vertical line with n3 characters. And more, we would like U to be as squared as possible -- that is, it must be satisfied that n1 = n3 = max { k| k <= n2 for all 3 <= n2 <= N } with n1 + n2 + n3 - 2 = N.


输入

Each input file contains one test case. Each case contains one string with no less than 5 and no more than 80 characters in a line. The string contains no white space.


输出

For each test case, print the input string in the shape of U as specified in the description.


样例输入

helloworld!

样例输出

h   !e   dl   llowor
#include<cstdio>
#include<cstring>
#include<iostream>//不好玩
using namespace std;
int main(){
    freopen("in.txt","r",stdin);
    char s[100];
    while(scanf("%s",s)!=-1){
        int N=strlen(s);
        int side=(N+2)/3;
        int mid=N-side*2;
        for(int i=0;i<side;i++){
            if(i<side-1)
            cout<<s[i]<<string(mid,' ')<<s[N-1-i];
            else{
                for(int j=i;j<mid+i+2;j++)
                cout<<s[j];
            }
            cout<<endl;
        }
    }
    return 0;
}

问题C:

题目描述

请输入高度h,输入一个高为h,上底边长为的等腰梯形(例如h=4,图形如下)。

   ****

  ******

 ********

**********

输入

输入第一行表示样例数m,接下来m行每行一个整数h,h不超过10。

输出

对应于m个case输出要求的等腰梯形。

样例输入

1
4

样例输出

   ****
  ******
 ********
**********
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(){
    int m;
    while(scanf("%d",&m)!=-1){
        while(m--){
            int h;
            scanf("%d",&h);
            int len=h+2*(h-1);
            for(int i=0;i<h;i++){
                cout<<string((len-(h+i*2))/2,' ')<<string(h+i*2,'*')<<endl;
            }
        }
    }
    return 0;
}

问题D:

题目描述

问题:输入n,输出正倒n层星号三角形。首行顶格,星号间有一空格,效果见样例
输入样例:
3
输出样例:
* * *
 * * 
  *
 * * 
* * *
数据规模 1<= n <=50

输入

输出

#include<cstdio>
using namespace std; //图形输出肯定是按行输出,或一整行或单个从左到右以此输出
int main(){
    int num;
    scanf("%d",&num);
    int cnt = num;
    for(int i = 0;i < 2 * num - 1;i++){ //控制输出行
        for(int k = cnt;k < num;k++){
            printf(" ");
        }//控制每行前的空格
        for(int j = cnt;j > 0;j--){
            if(j == 1) printf("*\n");
            else{
                printf("* ");   
            }
        }//控制每行输出
        if(i < num - 1){
            cnt--;
        }else{
            cnt++;
        }  //控制正和倒的输出
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值