首页 > ACM题库 > HDU-杭电 > Hdu 1303 Doubles-枚举-[解题报告] C++
2013
12-04

Hdu 1303 Doubles-枚举-[解题报告] C++

Doubles

问题描述 :

As part of an arithmetic competency program, your students will be given randomly generated lists of from 2 to 15 unique positive integers and asked to determine how many items in each list are twice some other item in the same list. You will need a program to help you with the grading. This program should be able to scan the lists and output the correct answer for each one. For example, given the list
1 4 3 2 9 7 18 22

your program should answer 3, as 2 is twice 1, 4 is twice 2, and 18 is twice 9.

输入:

The input file will consist of one or more lists of numbers. There will be one list of numbers per line. Each list will contain from 2 to 15 unique positive integers. No integer will be larger than 99. Each line will be terminated with the integer 0, which is not considered part of the list. A line with the single number -1 will mark the end of the file. The example input below shows 3 separate lists. Some lists may not contain any doubles.

输出:

The output will consist of one line per input list, containing a count of the items that are double some other item.

样例输入:

1 4 3 2 9 7 18 22 0
2 4 8 10 0
7 5 11 13 1 3 0
-1 

样例输出:

3
2
0


题意:给一串各不相同的数字(2-15个),问其中几个数字满足:这串数字中存在一个数是它的两倍。

mark:输入有点怪异。

代码:

# include <stdio.h>

int a[20] ;
int ans ;


int gao()
{
    int i, j, n ;
    int cnt = 0 ;
    ans = 0 ;
    while (~scanf ("%d", &n))
    {
        if (n == -1) return 0 ;
        if (n == 0) break ;
        a[cnt++] = n ;
    }
    for (i = 0 ; i < cnt ; i++)
    {
        for (j = 0 ; j < cnt ; j++)
            if (a[j] == a[i]*2) ans++ ;
    }
    return 1 ;
}

int main ()
{
    while (gao())
    {
        printf ("%d\n", ans) ;
    }
    return 0 ;
}

 


  1. 学算法中的数据结构学到一定程度会乐此不疲的,比如其中的2-3树,类似的红黑树,我甚至可以自己写个逻辑文件系统结构来。