C--------2130: 草船借箭

题目描述
大家都知道草船借箭的故事,三国时期周瑜为了难为诸葛亮,让他立下军令状三天造出10万支箭,还拖欠造箭的原材料,假如你是造箭工人,现在告诉你每种弓箭规格,即箭身的长度,以及每种规格弓箭所需要的数目,要求你把需要的弓箭都输出.
弓箭的基本样子为 “>±–+>”,其中"±–+"为箭身,数据保证箭身长度 L > 2
输入
有多组测试数据,每组数据首行有一个N(N<=10000),接下来一行有N个整数L,(2<L<20),L是无序且随机的。
输出
按照箭身的长度从小到大的顺序依次输出每组测试数据中,所有需要的弓箭形状和所需要的个数,每组输出后有一个空行。
样例输入
3
3 4 3
10
3 4 3 3 5 6 7 4 7 3
样例输出

±+> X 2
±-+> X 1

±+> X 4
±-+> X 2
±–+> X 1
±—+> X 1
±----+> X 2
两种方法
一种是将将所有箭的长度输入进一个数组中经过排序后判断输出

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i,n;
    int h,j,s;
    int num[10000];
    while(~scanf("%d",&n))
    {
        for(i=0;i<n;i++)
        {
            scanf("%d",&num[i]);
        }
        for(i=0;i<n-1;i++)
        {
            for(s=0;s<n-1;s++)
            {
                if(num[s]>num[s+1])
                {
                    j=num[s];
                    num[s]=num[s+1];
                    num[s+1]=j;
                }
            }
        }
        h=1;
        num[n]=-1;
        for(i=0;i<n;i++)
        {
			if (num[i]<3)
                continue;
            if(num[i]>19)
                break;
            if(num[i]==num[i+1])
            {
                h++;
                continue;
            }
            printf(">+");
            for(s=0;s<num[i]-2;s++)
            {
                printf("-");
            }
            printf("+> X %d\n",h);
            h=1;
        }
        printf("\n");
    }
    return 0;
}

另一种是将每种箭的数量放入一个数组中,经过判断后输出

#include<stdio.h>
int main()
{
    int a[100],i,N,n,k;
    while(scanf("%d",&N)!=EOF)
    {
        for(i=3;i<20;i++)
            a[i]=0;
        while(N--)
        {
            scanf("%d",&n);
            a[n]+=1;
        }
        for(i=3;i<20;i++)
        {
            k=i-2;
            if(a[i]!=0)
            {
                printf(">+");
                while(k--)
                    printf("-");
                printf("+> X %d\n",a[i]);
            }
        }
        printf("\n");
    }
 
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值