算法作业 - 鸡和兔
最编程
2024-07-12 13:33:35
...
难得呀,学院居然开了ACM-ICPC的算法培训课,真是罕见。老师是真的令我不爽,不过教的还行。今天第一道题是鸡兔同笼的变式,题目如下
签到题难度可能都没有,蓝桥杯的签到题还差不多,好,开始分析题目。
粗略的扫了一下题目发,概括一下题目:知道腿数a,求最多有几只动物,最少有几只动物。嗯,很简单。脑子里第一反应是及其暴力的双重循环然,
贴一下第一反应的代码(虽然说很蠢,但总能得出一个正确结果吧):
//循环才是王道(手动滑稽)
bool sumflag = false; for (int i = 1; i < a/2; i++) { for (int j = 1; j < a/2; j++) { if (i*2+j*4 == a) { sumflag = true;//确认有符合类型 if (max < i+j)//记录最小动物数 { max = i + j; } if (min > i+j)//记录最大动物数 { min = i+j; } } } } if (!sumflag) { printf("0 0\n"); } else { print("%d %d", max, min); } //看看就好看了,太暴力le
但是,太暴力了,所以开动脑筋想了想,嗯,什么时候动物数最多呢???,嗯,鸡只有两只腿,嗯~ o(* ̄▽ ̄*)o,腿少的动物越多,动物总数越多,嗯!所以,动物最少的情况类推就好了,所以核心代码出来了:
自己能写出来就不要看代码
#include <stdio.h> #include <stdlib.h> #include <stdio.h> #include <stdlib.h> /** * @author 杨文蓁的小迷弟 * @note 算法作业1 * @date 2019/08/25 */ int main() { int i, j, L, times, start, end, count; int a[10001] = {0}; count = 0; while ( ~scanf( "%d%d",&L ,× ) ) { for ( i = 0; i < times ;i++ ) { scanf( "%d%d",&start ,&end ); for ( j = start; j <= end; j++ ) { if ( 0 == a[j] ) { a[j] = 1; count++; } } } printf( "%d\n", 1+L-count ); } return 0; } int main() { int times, legs; scanf("%d", ×); while (times--) { scanf("%d", &legs); if (0 == legs % 2)//先判断是不是偶数,只要奇数腿就直接0 0 { if (0 == legs % 4)//特判可以被4整除的情况 { printf("%d %d\n", legs / 4, legs / 2); } else//常例 { printf("%d %d\n", (legs - 1) / 4 + 1, legs / 2);//自己摸索出来的向上取整((n-1)/4)+1 } } else { printf("0 0\n"); } } return 0; }
好了,算法艰辛,砥砺前行!
上一篇: acm C 鸡兔问题