题目描述
大家都知道草船借箭的故事,三国时期周瑜为了难为诸葛亮,让他立下军令状三天造出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");
}
}