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;
}