ACM题目

题目1

Problem Description

有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

 

 

Input

输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。

 

 

Output

对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。

 

 

Sample Input

2

4

5

0

 

 

Sample Output

2

4

6

 

设计过程:

这道题的题目比较难理解,一开始以为第一头大母牛也计算在内,但是通过观察已给出的例子,可以得知:这道题的输出结果应该仅仅包含出生的小母牛。

首先,由于输入的样例里面要求输入0则停止程序,那么确定了输入方式应该为while (scanf("%d", &n), n)  ——即逗号表达式。

然后是解题的关键。一开始没有任何思路,我先在草稿纸上进行列举。一直罗列到n=12,观察出规律,即后一项等于前一项+前三项。

另外我采用了预处理的方式,题目可能涉及到的结果全部算出来,根据n直接输出结果。

 

代码:

#include <stdio.h>

int main(void)

{     

         intn, i;   

         inta[55] = {1, 2, 3, 4, 6}; 

         for(i = 5 ; i < 55  ;i++)      

                   a[i]= a[i - 1] + a[i - 3];   

         while(scanf("%d", &n), n) 

         {        

                   printf("%d\n",a[n - 1]); 

  }   

         return0;

}

运行结果:


 

题目2

Problem Description

作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵
但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡老师最近就在考虑一个问题:如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢?
这里假设老师的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。

 

 

Input

输入数据包含多个测试实例,每个测试实例的第一行是一个整数n(n<100),表示老师的人数,然后是n个老师的工资。
n=0表示输入的结束,不做处理。

 

 

Output

对于每个测试实例输出一个整数x,表示至少需要准备的人民币张数。每个输出占一行。

 

 

Sample Input

3

1 2 3

0

 

 

Sample Output

4

设计过程:

我觉得解决这道题就应该像真正发钞票一样,先发百元大钞,然后50,随后是10块的几张,最后是5块1块的,于是我程序也是这样设计。先把100元的发完,剩下的肯定在0-99元之间,然后可以通过判断和50元比的大小,比50元大,就发一张50元,然后把应发数量减去50,以此类推,完成程序。(最后用switch直接判断,最后相当于一次预处理)

代码:

#include <stdio.h>

int main(void)

{     

         intn, i;   

         while(scanf("%d", &n), n) 

         {      

                   intm=0,x=0,bai=0,a=0,sheng=0;

                   for(i=0;i<n;i++)

                   {

           bai=0,a=0,sheng=0;

                            scanf("%d",&m);

                            bai=m/100;

                            sheng=m-bai*100;

                            if(sheng>=50){sheng=sheng-50;x++;}

                            if(sheng>=10)

                            {

                a=sheng/10;

                                     sheng=sheng-a*10;

                            }

                            if(sheng>=5)

                            {

                sheng=sheng-5;

                                     x++;

                            }

                           

           switch(sheng)

                            {

                            case1:x++;break;

                            case2:x++;break;

                            case3:x=x+2;break;

                            case4:x=x+2;break;

                            }

                            x=x+bai+a;

                   }

                   printf("%d\n",x);

   }   

         return0;

}

调试过程:

一开始我没有在for语句里面把定义的数清空,导致多个数运算的时候,后面的数会影响到前面的数。

运行结果:


 

下载方式:https://pan.quark.cn/s/a4b39357ea24 布线问题(分支限界算法)是计算机科学和电子工程领域中一个广为人知的议题,它主要探讨如何在印刷电路板上定位两个节点间最短的连接路径。 在这一议题中,电路板被构建为一个包含 n×m 个方格的矩阵,每个方格能够被界定为可通行或不可通行,其核心任务是定位从初始点到最终点的最短路径。 分支限界算法是处理布线问题的一种常用策略。 该算法与回溯法有相似之处,但存在差异,分支限界法仅需获取满足约束条件的一个最优路径,并按照广度优先或最小成本优先的原则来探索解空间树。 树 T 被构建为子集树或排列树,在探索过程中,每个节点仅被赋予一次成为扩展节点的机会,且会一次性生成其全部子节点。 针对布线问题的解决,队列式分支限界法可以被采用。 从起始位置 a 出发,将其设定为首个扩展节点,并将与该扩展节点相邻且可通行的方格加入至活跃节点队列中,将这些方格标记为 1,即从起始方格 a 到这些方格的距离为 1。 随后,从活跃节点队列中提取队首节点作为下一个扩展节点,并将与当前扩展节点相邻且未标记的方格标记为 2,随后将这些方格存入活跃节点队列。 这一过程将持续进行,直至算法探测到目标方格 b 或活跃节点队列为空。 在实现上述算法时,必须定义一个类 Position 来表征电路板上方格的位置,其成员 row 和 col 分别指示方格所在的行和列。 在方格位置上,布线能够沿右、下、左、上四个方向展开。 这四个方向的移动分别被记为 0、1、2、3。 下述表格中,offset[i].row 和 offset[i].col(i=0,1,2,3)分别提供了沿这四个方向前进 1 步相对于当前方格的相对位移。 在 Java 编程语言中,可以使用二维数组...
### ACM竞赛题目概述 ACM竞赛涵盖了广泛的计算机科学领域,涉及算法设计、数据结构以及编程技巧等方面。对于希望参与此类比赛的学生而言,了解不同类型的经典问题是十分重要的[^2]。 #### 经典问题实例 一些常见的ACM竞赛题目包括但不限于: - **活动选择问题(Activity Selection Problem)**:给定一系列带有起始时间和结束时间的任务列表,目标是从这些活动中挑选尽可能多的互不重叠的子集。 - **霍夫曼编码(Huffman Coding)/解码(Decoding)**:这是一种用于无损压缩的数据编码方式,通过构建最小带权路径长度树来实现最优前缀码表的设计。 - **埃及分数(Egyptian Fraction)**:此问题旨在将以单位分母形式表示有理数的方法转换成若干个不同的单位分数之和的形式。 - **工作序列化(Job Sequencing Problem)**:当面对多个具有截止日期的工作项时,如何安排它们使得总收益最大化成为了一个挑战性的课题。 - **水管连接(Water Connection Problem)** 和 **安装书架(Fitting Shelves Problem)** 属于几何类算法应用案例,在解决实际生活场景下的布局规划方面有着重要意义。 上述提到的各种问题都属于典型的ACM竞赛考察范围之内,参赛者需掌握相应的理论基础并能够灵活运用到具体实践中去。 ```java // 示例代码片段展示快速读取输入以提升效率 import java.io.*; class FastReader { BufferedReader br; StringTokenizer st; public FastReader() { ... } // 构造函数初始化BufferedReader对象 String next(){...} // 获取下一个单词 int nextInt(){...} // 转换成整型数值返回 } ``` 为了更好地准备这类赛事,选手们还可以借鉴前辈的经验教训,比如针对Java语言特性做出适当调整——创建专门负责高效处理标准输入流`FastReader`辅助工具类可以有效缩短程序运行耗时,从而为复杂逻辑运算留出更多空间[^3]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值