首页 > ACM题库 > HDU-杭电 > Hdu 1322 Floppies-模拟[解题报告] C++
2013
12-09

Hdu 1322 Floppies-模拟[解题报告] C++

Floppies

问题描述 :

In this age of Internet, on-line connections, instantaneous email, etc., there are still some people who need to work with floppy disks. John is one of those. Every evening he goes home and continues what he has been doing in his office on his private UNIX system. He copies all the files he needs to floppy disks according to the following procedure:
1. Put all files in one big SHAR file.
2. Compress the file.
3. Uuencode it, such that it is split in nice lines of 62 characters each (including the new-line).
4. Split it in files of 30,000 lines each (about 1.86Mb).
5. Compress each of the files and put it on a floppy by itself.So far, this procedure always worked, since 1.86Mb of uuencoded text, after compression, will nicely fit on a 1.44Mb floppy disk.Now, given that through compression the size of the SHAR file halves and that uuencoding a compressed file adds 50% to its size (each rounded to the nearest integer number of bytes), we would like to know for a given size of the SHAR file how many floppies John needs.

输入:

The input contains several test cases. Each test case consists of a single line containing one integer s (0 <= s <= 1,000,000,000), specifying the size of the SHAR file in bytes.The file ends with a file having s = 0. Do not generate output for this file.

输出:

For each test case, first output the number of the test case (‘File #1′, ‘File #2′, etc.), followed by a line that contains the minimal number of floppies needed for the transfer and a blank line. Adhere to the format shown below in the sample output.

样例输入:

1000000
10000000
100000000
0

样例输出:

File #1
John needs 1 floppies.

File #2
John needs 5 floppies.

File #3
John needs 41 floppies.


这题是个简单题 但是在网上几乎没有人提供AC经验 从题库上看,做出来的人也不多
这道题就是传说中的害人题 关卡全在看懂题目
这句话是关键:
given that through compression the size of the SHAR file halves and that uuencoding a compressed file adds 50% to its size

#include <stdio.h>
int main()
{
    double in;
    int out,count = 1;
    while(scanf("%lf",&in)!=EOF,in!=0)
    {
        in *= 0.75; // 相当于in = in / 2 * 1.5
        in /= (1.86*1000000);
        out = (int)in;
        if(in - out != 0)
        {
            out++;
        }
        printf("File #%d\nJohn needs %d floppies.\n\n",count++,out);
    }
    return 0;
}

解题报告转自:http://hi.baidu.com/balxajneatbmtwd/item/2e48da71a4604d3b7044233f


  1. 为什么for循环找到的i一定是素数叻,而且约数定理说的是n=p1^a1*p2^a2*p3^a3*…*pk^ak,而你每次取余都用的是原来的m,也就是n