社区讨论

一个传统的做法

P1146硬币翻转参与者 5已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lo9h87ao
此快照首次捕获于
2023/10/28 11:22
2 年前
此快照最后确认于
2023/10/28 11:22
2 年前
查看原帖
**利用二位数组把翻转硬币的过程初始化
输入n,易知翻转n次就可以得到答案
把二维数组的下三角全部变成1,翻转为反面,对应n次翻转硬币
再将奇数行的0和1全部对换
输出二维数组,即可得到正确答案**
如n=4时:
1000
1100
1110
1111
再奇数行0,1互换:
0111
1100
0001
1111
C
#include<stdio.h>
int main()
{
	int n, a[100][100];
	void reverse(int a[100][100], int n);
	void print(int a[100][100], int n);
	scanf("%d", &n);
	printf("%d\n", n);
	for (int i = 0; i < n; i++)//初始化
		for(int j=0;j<n;j++)
			a[i][j] = 0;
	reverse(a,n);//翻转硬币
	print(a, n);//输出
	return 0;
}
void reverse(int a[100][100], int n)
{
	int i;
	for (i = 0; i < n; i++)//每次翻转一个硬币
		for (int j = 0; j <= i; j++)
			a[i][j] = 1;
	for (int j = 0; j < n; j+=2)//将奇数行0,1互换
	{
		for (int k = 0; k < n; k++)
		{
			if (a[j][k] == 0)
				a[j][k] = 1;
			else
				a[j][k] = 0;
		}
	}
}
void print(int a[100][100], int n)
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
			printf("%d", a[i][j]);
		printf("\n");
	}
}

回复

4 条回复,欢迎继续交流。

正在加载回复...