码迷,mamicode.com
首页 > 其他好文 > 详细

USTC OJ — 1005 Booklet Printing(找规律,简单题)

时间:2014-12-12 14:35:50      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   sp   for   

1. 题目描述

本题的描述比较凌乱,不过题目给出的测试数据比较好,可以推测出题目的意思。

下面是题目给出的测试数据:

bubuko.com,布布扣

2. 算法设计

每一张纸可以印4页,从第一张纸开始往后遍历,分别设置每张纸上需要印制的页码即可。

以第二组测试数据为例:

共需要印刷的页数n = 14,那需要的纸张数sheet_num = n / 4 + 1 = 4。

sheet_num = 4时,共可以印4*4 = 16页。实际只需要印14页,那就有两页空着,需要印上Black。

观察相邻的两页纸上印刷的页码,如下:

页码从前数1,2,。。。

bubuko.com,布布扣

 

页码从后数16,15,(前面两个>14,直接输出Black)14,。。。

bubuko.com,布布扣

 

每次循环一张纸(4个页码),如果当前第2张纸已经印刷完了,如下:

bubuko.com,布布扣

 

下面开始印刷第三张纸:

首先front: r_page = 12, l_page = 5   (r_page--, l_page++)

然后back:   l_page = 6  , r_page = 11 (r_page--, l_page++)

后面依次下去。。。

 

3. AC Code

bubuko.com,布布扣
 1 #include <stdio.h>
 2 
 3 void ac_fun(int n);
 4 int main()
 5 {
 6     int n;
 7     // freopen("in.txt", "r", stdin);
 8     while ( scanf("%d", &n) != EOF && 0 != n )
 9     {
10         printf("Printing order for %d pages:\n", n);
11         ac_fun(n);
12     }
13     return 0;
14 }
15 
16 void ac_fun(int n)
17 {
18     int i;
19     int l_page, r_page;
20     int sheet_num;
21     int l_board, r_board;
22     if ( n % 4 == 0 )
23         sheet_num = n / 4;
24     else
25         sheet_num = n / 4 + 1;
26 
27     l_board = 1;
28     r_board = sheet_num * 4;
29 
30     // 从前往后,遍历每一张纸
31     for ( i = 1; i <= sheet_num; i++ )
32     {
33         // sheet‘s front
34         if ( r_board > n )
35             l_page = 0;
36         else
37             l_page = r_board;
38         r_page = l_board;
39         l_board++;
40         r_board--;
41         if ( l_page == 0 )
42             printf("Sheet %d, front: Blank, %d\n", i, r_page);
43         else
44             printf("Sheet %d, front: %d, %d\n", i, l_page, r_page);
45         
46         if ( r_page >= n ) break;
47 
48         // sheet‘s back
49         if ( r_board > n  )
50             r_page = 0;
51         else
52             r_page = r_board;
53         l_page = l_board;
54         l_board++;
55         r_board--;
56         if ( r_page == 0 )
57             printf("Sheet %d, back : %d, Blank\n", i, l_page);
58         else
59             printf("Sheet %d, back : %d, %d\n", i, l_page, r_page);
60     }
61 }
View Code

 

USTC OJ — 1005 Booklet Printing(找规律,简单题)

标签:style   blog   http   io   ar   color   os   sp   for   

原文地址:http://www.cnblogs.com/nuppt/p/4159503.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!