sdacm-test0076-20170427

来源:互联网 发布:该域名未授权解决方案 编辑:程序博客网 时间:2024/05/29 17:02

问题 A: 当总统

时间限制: 1 Sec  内存限制: 32 MB
提交: 49  解决: 23
[提交][状态][讨论版]

题目描述

小明想当丑国的总统,丑国大选是按各州的投票结果来确定最终的结果的,如果得到超过一半的州的支持就可以当选,而每个州的投票结果又是由该州选民投票产生的,如果某个州超过一半的选民支持小明,则他将赢得该州的支持。现在给出每个州的选民人数,请问小明至少需要赢得多少选民的支持才能当选?

输入

输入包含多组测试数据。
每组数据的第一行是一个整数N(1<=N<=101),表示丑国的州数,当N=0时表示输入结束。
接下来一行包括N个正整数,分别表示每个州的选民数,每个州的选民数不超过100。

输出

对于每组数据输出一行,表示小明至少需要赢得支持的选民数。

样例输入

3

5 7 5

0

样例输出

6

 

题目大意

每个州如果有过半的人支持他,该州就支持他,如果有过半的州支持,他就能当总统。

解题思路

把每个数据除以2加一,把每个处理过的都相加,即为所求。

错误分析

         每个数除以2加一,不区分奇偶数。

#include<stdio.h>

int main()
{
int a[1050],i,k,n,sum,j,t;
while(scanf("%d",&n)!=EOF,n!=0)
{
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}

k=n/2+1;
for(i=1;i<=k;i++)
{

a[i]=a[i]/2+1;
}
sum=0;
for(i=1;i<=k;i++)
{
sum+=a[i];
}
printf("%d\n",sum);
}
return 0;
}

问题 B: 三角形划分区域

时间限制: 1 Sec  内存限制: 32 MB
提交: 43  解决: 15
[提交][状态][讨论版]

题目描述

用N个三角形最多可以把平面分成几个区域?

输入

输入数据的第一行是一个正整数T(1<=T<=10000),表示测试数据的数量。然后是T组测试数据,每组测试数据只包含一个正整数N(1<=N<=10000)。

输出

对于每组测试数据,请输出题目中要求的结果。

样例输入

2

1

2

样例输出

2

8

提示

[提交][状态][讨论版]

 

题目大意

找规律的题,找出n个三角形能组成的最大区域数。

解题思路

根据题意,区域数为3*n*(n-1)+2。

错误分析

         规律找错。

 

#include<stdio.h>
int main()
{
int n,b,q;
scanf("%d",&n);
while(n--)
{
scanf("%d",&b);
q=3*b*(b-1)+2;
printf("%d\n",q);
}
return 0;
}

问题 E: 出租车费

时间限制: 1 Sec  内存限制: 32 MB
提交: 43  解决: 17
[提交][状态][讨论版]

题目描述

某市出租车计价规则如下:起步4公里10元,即使你的行程没超过4公里;接下来的4公里,每公里2元;之后每公里2.4元。行程的最后一段即使不到1公里,也当作1公里计费。
一个乘客可以根据行程公里数合理安排坐车方式来使自己的打车费最小。
例如,整个行程为16公里,乘客应该将行程分成长度相同的两部分,每部分花费18元,总共花费36元。如果坐出租车一次走完全程要花费37.2元。
现在给你整个行程的公里数,请你计算坐出租车的最小花费。

 

输入

输入包含多组测试数据。每组输入一个正整数n(n<10000000),表示整个行程的公里数。
当n=0时,输入结束。

输出

对于每组输入,输出最小花费。如果需要的话,保留一位小数。

样例输入

3
9
16
0

样例输出

10
20.4
36

提示

[提交][状态][讨论版]

 

题目大意

起步4公里10元,即使你的行程没超过4公里;接下来的4公里,每公里2元;之后每公里2.4元。行程的最后一段即使不到1公里,也当作1公里计费。求出最少花费。

解题思路

对8取余,余数为1到5用2.4的单价超出的单价为2,余数为0则用商乘以18,其它的情况按题意运算。

错误分析

         题意理解错误。

#include<stdio.h>
int main()
{
double n,s;
int c,k,d;
while(scanf("%lf",&n)!=EOF,n!=0)
{
c=(int)n;
if(c<n)
k=c+1;
else
k=c;
if(k<=4)
s=10;
else if(k>4&&k<=8)
{
s=10+(k-4)*2;
}
else if(k>8&&k<13)
{
s=18+(k-8)*2.4;
}
else if(k>=13)
{
c=k%8;
d=k/8;
s=d*18;
if(c<=5)
s+=c*2.4;
else
{
s=s+10+(c-4)*2;
}
}
if(s-(int)s>0)
printf("%.1lf\n",s);
else
printf("%.0lf\n",s);
}
return 0;
}

问题 I: Least Common Multiple

时间限制: 1 Sec  内存限制: 32 MB
提交: 40  解决: 16
[提交][状态][讨论版]

题目描述

The least common multiple (LCM) of a set of positive integers is the smallest positive integer which is divisible by all the numbers in the set. For example, the LCM of 5, 7 and 15 is 105.

输入

Input will consist of multiple problem instances. The first line of the input will contain a single integer indicating the number of problem instances. Each instance will consist of a single line of the form m n1 n2 n3 ... nm where m is the number of integers in the set and n1 ... nm are the integers. All integers will be positive and lie within the range of a 32-bit integer.

输出

For each problem instance, output a single line containing the corresponding LCM. All results will lie in the range of a 32-bit integer.

样例输入

2
2 3 5
3 4 6 12

样例输出

15
12

提示

[提交][状态][讨论版]

 

题目大意

找出多个数的最小公倍数。

解题思路

运用辗转相除法求出最大公约数,再求最小公倍数。

错误分析

求最小公倍数时,先乘后除会超限。

#include<stdio.h>
int gb(int a,int b)
{
int t,c,d,e;
c=a;
d=b;
if(a<b)
{
t=a;
a=b;
b=t;
}
while(b)
{
t=a%b;
a=b;
b=t;
}
e=c/a;
e*=d;
return e;
}
int main()
{
int n,t,i,a[1050],c,d;
scanf("%d",&n);
while(n--)
{
scanf("%d",&t);
for(i=1;i<=t;i++)
{
scanf("%d",&a[i]);
}
c=a[1];
for(i=2;i<=t;i++)
{

d=a[i];
c=gb(c,d);
}
printf("%d\n",c);
}
return 0;
}

 

0 0
原创粉丝点击