【分糖/杨辉/抽牌】3.6 HOMEWORK

2.分糖果
10个小孩围成一圈分糖果,老师分给第1个小孩10块,第2个小孩2块,第3个小孩8块,第4个小孩22块,第5个小孩16块,第6个小孩4块,第7个小孩10块,第8个小孩6块,第9个小孩14块,第10个小孩20块。然后所有的小孩同时将手中的糖分一半给右边的小孩:糖块数为奇数的人可向老师要一块。设计程度,计算经过这样几次后,大家手中的糖块数一样多?每人各有多少块糖?

#include<iostream>
using namespace std;
int main()
{
    int a[10] = { 10,2,8,22,16,4,10,6,14,20 };
    int b[10] = { 0,0,0,0,0,0,0,0,0,1 };
    int sum = 0;
    while (a[0] != a[1] || a[0] != a[2] || a[0] != a[3] || a[0] != a[5] || a[0] != a[6] || a[0] != a[7] || a[0] != a[8] || a[0] != a[9])
    {
        for (int i = 0; i < 10; i++) b[i] = a[i] / 2;
        for (int j = 0; j < 10; j++)
        {
            a[(j + 1) % 10] = a[(j + 1) % 10] / 2 + b[j];
            if(a[(j+1)%10]%2==1) a[(j+ 1)% 10]++;
        }
        sum++;
    }
    cout << sum << endl;
    cout << a[0];
}

3. 放在一起的 54张扑克牌,按顺序把奇数位上的牌拿走,即拿走第1,3.5.7.9.等牌张。在剩下的牌中再把奇数位的牌拿走,…,如此下去,直到最后只剩下一张牌,这张牌就是“大王”那么这张牌在原来 54 张牌中处于第几张的位置呢?经过演算,发现是第32张。牌张扩大到任意正整数。现在有一叠牌,数清楚牌张,总能通过奇数位牌张拿走的有限轮操作,到达最后只剩下一张牌的状态。假如剩下的这张牌就是大王,问该大王在整个一叠牌中的位置。
输入描述
若干个正整数N(0<N<10000000),每个正整数表示一叠牌的张数。若为0,则结束。输出描述
对于每个正整数N所表示的牌张,以一行方式输出大王的位置
样本输入
6
54
0
样本输出
3

#include<iostream>
using namespace std;
int main()
{
    long long n, pos = 2;
    cin >> n;
    int sum = 0;
    int* a = new int[10000000];
    for (int i = 1; i <= n; i++)
        a[i] = i;
    long long num = n;
    while (num != 1)
    {
        int j = 1;
        for (int i = 2; i <= num; i = i + 2)
            a[j++] = a[i];
        num /= 2;
        sum++;
    }
    for (int i = 1; i < sum; i++)
        pos *= 2;
    cout << pos;
}
 

4. 在屏幕上打印杨辉三角形。杨辉三角形又称贾宪三角形、帕斯卡三角形,是二项式系数在三角形中的一种几何排列。如下图显示了杨辉三角形的前8行。请设计代码,输入整数N(N<20),即可在屏幕上打印N行的杨辉三角形。

#include <iostream>

using namespace std;

int n;

int main()

{

cin >> n;

int a[20][20];

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

a[i][0] = 1;

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

a[i][i] = 1;//定义前几个数

for (int i = 1; i < n; i++)

{

for (int j = 1; j < i; j++)

a[i][j] = a[i - 1][j - 1] + a[i - 1][j];//上一行对应位置相加并填充数组

}

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

{

for (int m = 1; m <= n - i - 1; m++) cout << " ";//输出对应空格数

for (int j = 0; j < i + 1; j++)

cout << a[i][j] << " ";

cout << endl;

}

return 0;

}

   

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值