Problem L: 数羊————思维不严谨

今天刷到一题,题目思路很简单,但是我却硬生生卡了俩个小时,找不出原因真的令我很蛋疼。后面偶然找到错误,觉得自己实在过于愚蠢,因此写这篇博客记录一下。

Problem L: 数羊

Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 1070 Solved: 408

Description

快码佳编四兄弟姐妹来到了大草原。
敕勒川,阴山下,

天似穹庐,笼盖四野。

天苍苍,野茫茫,

风吹草低见牛羊。
草原好美,他们玩的好开心。
突然,远处来了羊群。好多羊啊。
快码佳编四兄弟姐妹赶紧过来数羊。他们有的5个5个数,有的3个3个数,有的还按不同方式数了好几次,但非常奇怪的是,不管他们怎么数,总有一些羊剩下,而且更奇怪的如果再来几个羊,他们正好能数完不剩一个。你知道羊群里至少有多少只羊吗?

Input

第一行输入一个整数n和m表示有n种数法,每种数法总差m个羊才能每次正好数完
第二行输入n个整数A1,A2,…An,表示每种数法每次数的个数
其中2 <= n <=10, 1<= m < min(A1,A2,…An)

Output

一个整数表示羊群中至少有多少个羊

Sample Input

2 1
2 3

Sample Output

5

是不是很简单的一道题,具体过程我就不过多阐述了。。
一开始我卡住的原因是我先将数据排序,再令最大的值加一得出的值作为我迭代的初始值,其实这样子很多情况下都是对的,但是,若数羊的方法中存在羊的数量小于数羊方法的数量,这样就会导致错误。具体的话可以选择下面这个测试集试一下就知道了:
2 1
2 3

错误的代码

#include<bits/stdc++.h>
using namespace std;
int cmp(int a, int b)
{
	return a < b;
}
int main()
{
	int n,m;
	int a[1300];
	while (cin >> n>>m)
	{
		for (int i = 1; i <= n; i++)	cin >> a[i];
		sort(a + 1, a + 1 + n, cmp);
		int ans = a[1]+1;
		while (1)
		{
			int judge = 1;
			for (int j=1 ; j <= n; j++)
			{
				if ((ans + m) % a[j] != 0)
				{
					judge = 0;
					break;
				}
			}
			if (judge == 1) break;
			ans++;
		}
		printf("%d\n", ans);
	}
}

正确的代码

#include<bits/stdc++.h>
using namespace std;
int cmp(int a, int b)
{
	return a < b;
}
int main()
{
	int n,m;
	int a[1300];
	while (cin >> n>>m)
	{
		//输入个各
		for (int i = 1; i <= n; i++)	cin >> a[i];
		int ans = 1;
		while (1)
		{
			int judge = 1;
			for (int j=1 ; j <= n; j++)
			{
				if ((ans + m) % a[j] != 0)
				{
					judge = 0;
					break;
				}
			}
			if (judge == 1) break;
			ans++;
		}
		printf("%d\n", ans);
	}
}

实际上就让初始值从0或者从1开始就可以,我把这道题想复杂了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值