• codeforces A. Candy Bags 解题报告


    题目链接:http://codeforces.com/contest/334/problem/A

    题意:有n个人,将1~n袋(第 i  袋共有 i  颗糖果,1<= i  <=n)所有的糖果(n*(n+1)/2)均分到n个人中。

           这里要注意的是输出问题,每行中的前n / 2(包括n/2)个数比较容易解决,就是每两个数中相隔n个长度,第n/2个数和第n/2+1个数之间隔了多少个长度,这是值得考虑的问题。我的做法是,由于每个人分到的糖果是 (n / 2) * (n*n+1)  (输出的n个数看成n/2个组合,每个组合有两个数,这两个数中的和恰好是n*n+1),所以用一个数组存储后半部分n/2+1 ~ n。例如输入的n为6,输出如下:

    第一个人:  1     7      13   24  30  36

    第二个人:  2   8     14   23  29  35

    第三个人:  3   9     15    22  28  34

    第四个人:  4   10        16    21       27       33

    第五个人:    5         11        17         20        26      32

    第六个人:  6   12         18        19        25      31

           以第一个人作为分析:1和36是一个组合,另外两个组合分别是7和30,13和24,当输出1的时候,计算出36(6*6+1-1),存入temp[0],输出7的时候,计算出30(37-7),存入temp[1],输出13,计算出24,存入temp[2],最后按逆序(2--->0)输出即可。可能方法有点笨,希望热心的读者可以提出些更好的方法,让我学习学习。

         

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <stdlib.h>
     4 using namespace std;
     5 
     6 const int maxn = 10000 + 10;
     7 
     8 int main()
     9 {
    10     int i, j, k, l, n, temp[maxn];
    11     while (scanf("%d", &n) != EOF)
    12     {
    13         for (i = 1; i <= n; i++)
    14         {
    15             k = 0;
    16             for (j = i; j <= (n * n / 2); j += n)
    17             {
    18                 if (j == i)
    19                     printf("%d", j);
    20                 else
    21                     printf(" %d", j);
    22                 temp[k++] = n * n + 1 - j;
    23             }
    24             for (l = n / 2 -1; l >= 0; l--)
    25             {
    26                 printf(" %d", temp[l]);
    27             }
    28             printf("\n");   
    29         }
    30     }
    31     return 0;
    32 }

         

  • 相关阅读:
    JavaScript学习笔记(三十八) 复制属性继承
    每天一道逻辑思维题
    动态规划(4):求子数组最大和
    30天自制操作系统第四天学习笔记
    UVA 1344 Tian Ji -- The Horse Racing
    Word隐藏回车符技巧
    Apache Thrift
    Android更改桌面应用程序launcher的两种方式
    Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二)
    Java Collection
  • 原文地址:https://www.cnblogs.com/windysai/p/3220395.html
Copyright © 2020-2023  润新知