![]() |
#2
Sopphhiiaa2020-12-19 23:12
|
根据输入的数字和符号生成相应的柱状图显示。
输入
每个输入包含一个测试用例,第一个整数m(1<=m<=20),表示随后有m组数据,每组数据由一个数字n(-15<=n<=15)和一个字符组成,每组数据之间用空格分隔。数字代表柱状图的高度,字母代表该柱使用的画图符号。如果数字后没有字母,默认该柱的画图符号使用加号’+’。
输出
每个柱之间用1个空格间隔,图的空白处用空格填充。用减号’-’表示x轴。正数柱状向上,负数柱状向下。
样例
输入
6 1a 3 4b 2 -2 1
输出
b
+ b
+ b +
a + b + +
-----------
+
+

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int m,i;
scanf("%d",&m);//输入一个整数
char histogram[21][31];//声明一个名为柱状图的字符型数组
char str[20];//声明存入字母的数组
int num[20];//声明存入数字的数组
if(1<=m<=20){
for(i=0;i<m;i++){//将数据存入数组中
scanf("%d",&num[i]);
scanf("%c",&str[i]);
}
int shang,xia;//shang表示x轴上方的行数,xia表示x轴下方的行数
shang=0;
xia=0;
for(i=0;i<m;i++){
if(num[i]>0&&shang<num[i]){
shang=num[i];//找出上方应该有的行数
}
else if(num[i]<=0&&xia>num[i]){
xia=num[i];//找出下方应该有的行数
}
}
int hang,lie;
hang=shang-xia+1;//总的行数
lie=m;//总的列数
int j;
for(j=0;j<lie;j++){//一列一列的看,先对列进行循环
if(num[j]>0){//讨论在数字大于零时的情况
for(i=0;i<hang;i++){//再对行进行循环
if(i<shang-num[j]){//x轴上方为空格的情况
histogram[i][j]=' ';
}
else if(i>=shang-num[j]&&i<shang){
if(str[j]==' '||str[j]=='\n'){//数字后不带字母的情况
histogram[i][j]='+';
}
else//数字后带字母的情况
histogram[i][j]=str[j];
}
else if(i==shang)//x轴
histogram[i][j]='-';
else//在x轴下方为空格的情况
histogram[i][j]=' ';
}
}
else if(num[j]>=0) {//讨论数字小于等于零时的情况
for(i=0;i<hang;i++){
if(i<shang){//因数字小于零,在x轴上方都是空格
histogram[i][j]=' ';
}
else if(i==shang)//x轴
histogram[i][j]='-';
else if(i>shang&&i<=shang-num[j]){
if(str[j]==' '||str[j]=='\n'){//数字后无字母
histogram[i][j]='+';
}
else//数字后有字母
histogram[i][j]=str[j];
}
else//在这列中的其他行是空格
histogram[i][j]=' ';
}
}
}
for(i=0;i<shang;i++){
if(i==shang){
for(j=0;j<lie;j++)
{
if(j==lie-1)
{
printf("%c",histogram[i][j]);}
else
{
printf("%c-",histogram[i][j]);}
}
}
else
{
for(j=0;j<lie;j++)
{
printf("%c ",histogram[i][j]);}
}
printf("\n");
}
}
return 0;
}
#include <stdlib.h>
int main(void)
{
int m,i;
scanf("%d",&m);//输入一个整数
char histogram[21][31];//声明一个名为柱状图的字符型数组
char str[20];//声明存入字母的数组
int num[20];//声明存入数字的数组
if(1<=m<=20){
for(i=0;i<m;i++){//将数据存入数组中
scanf("%d",&num[i]);
scanf("%c",&str[i]);
}
int shang,xia;//shang表示x轴上方的行数,xia表示x轴下方的行数
shang=0;
xia=0;
for(i=0;i<m;i++){
if(num[i]>0&&shang<num[i]){
shang=num[i];//找出上方应该有的行数
}
else if(num[i]<=0&&xia>num[i]){
xia=num[i];//找出下方应该有的行数
}
}
int hang,lie;
hang=shang-xia+1;//总的行数
lie=m;//总的列数
int j;
for(j=0;j<lie;j++){//一列一列的看,先对列进行循环
if(num[j]>0){//讨论在数字大于零时的情况
for(i=0;i<hang;i++){//再对行进行循环
if(i<shang-num[j]){//x轴上方为空格的情况
histogram[i][j]=' ';
}
else if(i>=shang-num[j]&&i<shang){
if(str[j]==' '||str[j]=='\n'){//数字后不带字母的情况
histogram[i][j]='+';
}
else//数字后带字母的情况
histogram[i][j]=str[j];
}
else if(i==shang)//x轴
histogram[i][j]='-';
else//在x轴下方为空格的情况
histogram[i][j]=' ';
}
}
else if(num[j]>=0) {//讨论数字小于等于零时的情况
for(i=0;i<hang;i++){
if(i<shang){//因数字小于零,在x轴上方都是空格
histogram[i][j]=' ';
}
else if(i==shang)//x轴
histogram[i][j]='-';
else if(i>shang&&i<=shang-num[j]){
if(str[j]==' '||str[j]=='\n'){//数字后无字母
histogram[i][j]='+';
}
else//数字后有字母
histogram[i][j]=str[j];
}
else//在这列中的其他行是空格
histogram[i][j]=' ';
}
}
}
for(i=0;i<shang;i++){
if(i==shang){
for(j=0;j<lie;j++)
{
if(j==lie-1)
{
printf("%c",histogram[i][j]);}
else
{
printf("%c-",histogram[i][j]);}
}
}
else
{
for(j=0;j<lie;j++)
{
printf("%c ",histogram[i][j]);}
}
printf("\n");
}
}
return 0;
}
我的运行结果如下:
6 1a 3 4b 2 -2 1
b
+ b
+ b +
a + b + ?+
麻烦帮我看看到底是哪里出了错,已经想了很久了,可是运行结果就是不对