图形输出看似简单,但是我是没怎么搞懂,有一些参考了别人的代买。虽然只有四个问题,但是真的把我搞糊涂了。
问题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 的等腰梯形(例如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:
题目描述
输入样例:
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;
}