首页 > ACM题库 > HDU-杭电 > HDU 1235 统计同成绩学生人数[解题报告] C++
2013
12-04

HDU 1235 统计同成绩学生人数[解题报告] C++

统计同成绩学生人数

问题描述 :

读入N名学生的成绩,将获得某一给定分数的学生人数输出。

输入:

测试输入包含若干测试用例,每个测试用例的格式为

第1行:N
第2行:N名学生的成绩,相邻两数字用一个空格间隔。
第3行:给定分数

当读到N=0时输入结束。其中N不超过1000,成绩分数为(包含)0到100之间的一个整数。

输出:

对每个测试用例,将获得给定分数的学生人数输出。

样例输入:

3
80 60 90
60
2
85 66
0
5
60 75 90 55 75
75
0

样例输出:

1
0
2

Hint
Hint
Huge input, scanf is recommended.

乱搞

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
	int n;
	int num[10005];
	int flag;
	int i;
	while(cin>>n&&n)
	{
		flag=1;
		for(i=0;i<n;i++)
		{
			scanf("%d",&num[i]);
			if(num[i]>=0)
			{
				flag=0;
			}
		}
		
		if(flag)
		{
			printf("0 %d %d\n",num[0],num[n-1]);
			continue;
		}
		else
		{
			int sum=num[0];
			int max=num[0];
			int temp=0;
			int start=0,end=0;
			for(i=1;i<n;i++)
			{
				if(sum<0)
				{
					sum=0;
					temp=i;
				}
				sum+=num[i];
				if(max<sum)
				{
					max=sum;
					start=temp;
					end=i;
				}
				
			}
			printf("%d %d %d\n",max,num[start],num[end]);
		}
	}
	return 0;
}


  1. 在方法1里面:

    //遍历所有的边,计算入度
    for(int i=0; i<V; i++)
    {
    degree = 0;
    for (j = adj .begin(); j != adj .end(); ++j)
    {
    degree[*j]++;
    }
    }

    为什么每遍历一条链表,要首先将每个链表头的顶点的入度置为0呢?
    比如顶点5,若在顶点1、2、3、4的链表中出现过顶点5,那么要增加顶点5的入度,但是在遍历顶点5的链表时,又将顶点5的入度置为0了,那之前的从顶点1234到顶点5的边不是都没了吗?

  2. 问题3是不是应该为1/4 .因为截取的三段,无论是否能组成三角形, x, y-x ,1-y,都应大于0,所以 x<y,基础应该是一个大三角形。小三角是大三角的 1/4.

  3. 问题3是不是应该为1/4 .因为截取的三段,无论是否能组成三角形, x, y-x ,1-y,都应大于0,所以 x<y,基础应该是一个大三角形。小三角是大三角的 1/4.

  4. 我没看懂题目
    2
    5 6 -1 5 4 -7
    7 0 6 -1 1 -6 7 -5
    我觉得第一个应该是5 6 -1 5 4 输出是19 5 4
    第二个是7 0 6 -1 1 -6 7输出是14 7 7
    不知道题目例子是怎么得出来的