假期教案13

先是28,前一个人24,因此差值为4,而下一个人差值为5.

因此接下来的所有人都是报24+4,超过k值时(24+4+5)%k,下一个为(24+4+5+6)%k

换算成数字之间的问题便为(24+4n+1+2+3)%k,1+2+3则可以用for循环来表示,所以可以用一层for循环来计算

i++;

delta=delta+i;

最后对总数求模且记录次数,因此只要确认起始值和初识差值n。

解题思路:

输入nn个人,kk值,tt轮数

建立a数组为tt大小且将a数组第一个数赋值为1,

计算delta为小于人数的i自增循环,表示过了一轮应该添加的delta值

第二个for计算几轮后小明该输出的值

第三个for循环是将所有轮数该输出的值相加

总结:输入人数,k值,以及轮数,则可以得到每轮输出值

可以通过假想法来确认数字间的规律

!!!但这会遇到int类型tt大小不够

优化版本:

直接用first和second来代替a[i-1]和a[i],将first不断刷新,但用sum保留second累加的值

最后输出,就不会因为tt过大而int a[tt]溢出所带来的问题

为了防止过大可以将p提前求余,其次改为long long类型也能扩大变量类型大小

蛇形矩阵(建立指针)(多个for嵌套)

建立一个指针

其呈现105×105的空间,按照

0,1,2,3,...,98,99

1,

2,

...,

98,

99

排列

因此定义vis[0][0]=1;

解题思路:

1.建表期间

先创立一个指针来存放100长度的蛇形矩阵,并在vis[0][0]=1

再利用for来计算每个列数字(每个列的数字等于上一个数字加上rows++,rows初始时定义为会自增的1)

用第一层for循环来计算行所需要的次数,再用第二层for循环来确定每个输出的数字

再建立一个会自增的delta,每行的下一个数字都等于上一个数字加上delta++,初识值为2

2.输出表

利用第一层for来输出列数(补回车)

第二层for循环输出一行的数字,并且在每个数字后输出空格,加上判断来不输出最后一个的空格

优化版本:

由于我们输入表时只使用了一半左右的空间,因此产生了部分空间的浪费

使用vector(容器)

sort的灵活运用(头文件algorithm)

解题思路:

建变量:

先根据输入要求建立两个输入数组,其中w为两个纪念品最高价格和

nn为纪念品数量,再用for循环来输入每个纪念品价值,

用sort函数将数组a中升序排列,建立f为数组a中第一个下标,

l为a数组中最后一个下标,number为组数

核心算法:

从第一个纪念品和最后一个纪念品开始相加,

(1)如果相加小于等于最高值w,

则可以number++且l--,f++,

(2)如果相加大于w,则不能成组,number++且只l--,

在不知道循环次数下,用whlie循环,条件为f

(3)如果f等于l则到了数值中间只能单独成组,则number++

输出number

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值