第二次线上赛小结

一、输出字符;

描述

输出指定数量的指定字符。

输入

多组案例。一个正整数n,表示案例的数量。

每组案例由一个正整数m和一个字符a组成。

输出

针对每组案例,如果m是奇数,则输出m个a,中间不要有空格;如果m是偶数,则输出m/2个a,每两个a之间都要有一个空格,最后一个a后面没有空格。

每组案例输出完都要换行。

样例输入

2
5 B
6 N

样例输出

BBBBB

N N N

关键代码

if (m % 2 == 1)
{
	*********
	{
		cout << a;
	}
}
else
{
	for (int i = 1; i <= m - 1; i++)
    {
		if (********)
			cout << a;
		else
			cout << " ";
	}
}

注意事项

奇数和偶数分别输出的是什么,偶数最后一个字符输出后没有空格。

二、二次函数最值问题;

描述

已知一个二次函数f(x)=ax2+bx+c,求该函数的最值。

输入

多组案例,一个正整数n,表示案例的数量。

每组案例由3个整数a、b、c组成,其中a不等于0,保证b是2a的整数倍,保证最值是一个整数。

输出

针对每组案例,如果该函数有最大值,则输出max=最大值;如果该函数有最小值,则输出min=最小值。

每组案例输出完都要换行。

样例输入

2
1 2 3
-1 2 3

样例输出

min=2

max=4

关键代码

ans = (4 * a * c - b*b) / (4 * a);
	if (a > 0)
		cout << "min=" << ans<<endl;
	else
		cout << "max=" << ans<<endl;
	

注意事项

括号不能少!!!(4*a*c-b*b)/(4*a)与(4*a*c-b*b)/4*a的计算结果是不一样的;还有二次函数的开口问题。

三、静默的质数;

描述

班上有m个同学玩报数游戏。1号同学想了一个正整数a,并且保证a不是质数,然后大声地喊出来,报给了2号同学;2号同学把a加1,这个数字如果不是质数,则该同学会大声地喊出来,报给3号同学,如果这个数字是质数,则2号同学会通过传纸条的方式静默地把这个数字报给3号同学;...;以此类推,每个同学都要把上一个同学传递来的数字加1,并且根据该数字是质数与否,决定是喊出来还是静默传递,包括最后一名同学(虽然他不需要再往下传递了)。这样当所有m个同学完成游戏后,到底有多少名同学选择了静默的方式。

输入

多组案例。一个正整数n,表示案例的数量。(n<=20)

每组案例由2个正整数m和a,分别表示同学的数量和1号同学想的数字。(m<=100, 2<=a<=10000)

输出

针对每组案例,输出一个正整数,表示有多少个同学的数字是质数。

每组案例输出完都要换行。

样例输入

2
6 12
2 15

样例输出

2

0

关键代码

bool isPrime(int a)
{
	if (a < 2)
	{
		return false;
	}
	for (int i = 2; i <= sqrt(a); i++)
	{
		if (a % i == 0)
		{
			return false;
		}
	}
	return true;
}
*
*
*
*
*
*
*
*
for (int i = a; i < a + m; i++)
	{
		if (isPrime(i))
			cnt += 1;
    }



注意事项

判断素数的函数要写对,如果多组数据cnt要重置。

四、总和为4;

描述

输入一些正整数,判断其中是否有若干个数字的总和为4(要求至少2个数字的和)

输入

多组案例。一个正整数n,表示案例的数量。(n<=20)

每组案例首先是一个正整数m,表示数字的个数;然后是m个正整数。(m<=2500000)

输出

针对每组案例,如果这m个正整数中有2个或者2个以上数字的总和为4,则输出Yes,否则输出No。

每组案例输出完都要换行。

样例输入

3
4
1 2 5 2
3
4 4 4
5
2 3 5 6 8

样例输出

Yes

No

No

关键代码

int a[4] = {0};
for (***************)
{
	int x;
	cin >> x;
	if (x < 4)
	{
		a[x]++;
	}
}
if ((a[1] >= 1 && a[3] >= 1) || (a[2] >= 2) || (a[1] >= 2 && a[2] >= 1) || (a[1] >= 4))
	cout << "Yes\n";
else
	cout << "No\n";

注意事项

加起来等于四只有1+3;2+2;1+1+2;1+1+1+1这四种。所以用数组计算输入的数中有多少1、2、3就能判断能否加起来等于4.

五、舍罕王-2;

描述

这是印度的一个古老传说,舍罕王打算重赏象棋发明人、宰相西萨·班·达依尔。这位聪明的大臣的胃口看来并不大,他跪在国王面前说:“陛下,请您在这张棋盘的第一个小格内,赏给我一粒麦子,在第二个小格内给两粒,第三格内给四粒,用这样下去,每一小格内都比前一小格加一倍。陛下,把这样摆满棋盘上所有64格的麦粒,都赏给您的仆人吧!” 
国王有m粒麦粒,然后在第一格内放1粒,第二格内放2粒,第三格内放4粒,…

当然国王的麦粒根本铺不满所有的格子,在某个格子上,最终停了下来。

问最后一个有麦粒的格子上有多少颗麦粒?

输入

多组案例。一个正整数n,表示案例的数量。(n<=20)

每组案例由一个无符号长整数(unsigned long long)m组成,表示麦粒的总数。(m取值在无符号长整型范围内)

输出

针对每组案例,输出一个无符号长整数,表示最后一个有麦粒的格子上麦粒的数量。

每组案例输出完都要换行。

样例输入

3

15

9

8446743973709

样例输出

8

2

4048697462606

关键代码

for (unsigned long long int i = 1; i < m; i *= 2)
	{
		m = m - i;
	}

注意事项

第一格放一个 第二格放两个 第三格放4个……第64格放2^(64-1)个

六、天文大潮;

描述

2021年10月8日厦门天文大潮,已知下一次天文大潮在a天以后,输出下一次天文大潮发生的时间。

闰年年份包括两种情况:4的倍数且非100的倍数;或者400的倍数且非3200的倍数。

输入

多组案例。一个正整数n,表示案例的数量。(n<=100)

每组案例由一个正整数a组成。(a<=10亿)。

输出

针对每组案例,输出3个整数,表示下一次天文大潮发生的年月日,每两个整数之间留一个空格。

每组案例输出完都要换行。

样例输入

2

1

1000000000

样例输出

2021 10 9

2739931 2 14

关键代码

bool leapYear(int m)
{
	if ((m % 4 == 0 && m % 100 != 0) || (m % 400 == 0) && (m % 3200 != 0))
		return true;
	return false;
}
*
*
*
*
*
if (afterday >= 365)
{
	while (afterday > 0)
	{
		if (leapYear(year + 1))
		{
			afterday -= 366;
			if (afterday < 0)
			{
				afterday += 366;
				break;
			}
			year += 1;
		}
		else
		{
			afterday -= 365;
			if (afterday < 0)
			{
				afterday += 365;
				break;
			}
			year += 1;
		}
	}
}
while (afterday > 0)
{
	afterday--;
	day += 1;
	if (day > DAY[month])
	{
		month += 1;
		day = 1;
		if (month > 12)
		{
			month = 1;
			year += 1;
			if (leapYear(year))
			{
				DAY[2] = 29;
			}
			else
				DAY[2] = 28;
		}
	}
}

注意事项

首先是闰年判断的函数要对,其次如果还剩365天,下一年刚好是闰年,那么365-366=-1,所以要加回来,进入下面的循环。我不足365天后就开始一天一天加其实可以一月一月加再一天一天加,代码更优化 记得判断完是否闰年后2月的天数要改变

*根据自己遇到的问题和错误写的

如果还有问题的话请大家多斧正

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2019工控安全比赛线上赛第一场的modbus题目是一个经典的工控安全问题。Modbus是一种常用的工业通信协议,广泛应用于工控系统中。在这个题目中,参赛者需要针对给定的modbus通信流量进行分析和攻击。 首先,参赛者需要分析给定的modbus通信流量,了解通信协议的基本结构和字段含义。通常,modbus协议包含发送方地址、功能码、数据域和错误检测等字段。 接着,参赛者需要从通信流量中发现潜在的安全问题。例如,可能存在未经授权的访问、恶意数据注入、数据篡改等问题。通过仔细观察通信流量以及对协议规范的理解,参赛者可以发现一些异常行为。 在攻击阶段,参赛者需要设计和实施各种攻击方法来利用发现的漏洞。例如,可以尝试发送伪造的modbus请求,以获取未经授权的数据或执行非法操作。也可以尝试发送恶意数据来破坏设备或干扰正常的系统行。 参赛者在攻击中需要注意保护自身的隐私和安全,以避免被反制或被发现。同时,他们还需要掌握适当的攻击技巧和工具,以增加攻击的效果和成功率。 最后,在比赛结束后,参赛者需要提交详细的攻击报告,其中包括攻击过程、攻击方法和攻击效果的详细描述。同时,参赛者还需要提供相应的解决方案来修复发现的漏洞,以提高工控系统的安全性。 通过这场modbus题目的比赛,参赛者不仅可以提高对工控系统的理解和熟练度,还能够加深对工控安全的认识和思考。这对于提升工控系统的安全性,保护重要设备的稳定行具有重要意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值