P1319 压缩技术

在这里插入图片描述

代码:

#include<iostream>
using namespace std;
int n, s = 1, a,i =1;
int main()
{
	cin >> n;
	while (s <= n * n)
	{
		cin >> a;
		for (int j = 1; j <= a; j++)
		{
			if (i % 2 == 1)
				cout << 0;
			else 
				cout << 1;
			if (s % n == 0)
			{
				cout << endl;
			}
			s++;
		}
		i++;
	}
	return 0;
}

上面一题难度不是特别大,下面这一题难度就略大一点

在这里插入图片描述
这一题是上一题的接续,下面着重分析这一题;

思路:

首先输入的是n*n的正方形,我们可以先获取第一行的数字,这样就知道了n是多少,然后再定义一个字符串,每读进去一行,就把这一行接到设定好的字符串后面去,然后最后在统一的计算。

代码:

#include<iostream>
#include<cstdio>
using namespace std;
#include<string.h>

int main()
{
	char str[100],ans[100000];//建立两个字符串数组,ans用来存储所有的数字
	scanf("%s", str);//先输入第一行
	int n = strlen(str);//计算出第一行的数字个数,这也就算出了n
	strcat(ans, str);//将输入的连接上结果数组
	for (int i = 2; i <= n; i++)//将后面所有行的都连接上结果数组
	{
		scanf("%s", str);
		strcat(ans, str);
	}
	cout << n << " ";//首先打印第一个数,不能忘记!
	int sum = 0;
	char num = '0';
	for (int i = 0;i<=strlen(ans); i++)//接着进行判断了,i<=strlen(ans)是最后一个数字
												//其实是i = n -1,但是需要第n个与第n-1个不同,才能输出sum的值,所以i<=strlen(ans)
	{
		if (ans[i] == num) {
			sum++;
		}
		else {
			cout << sum << " ";
			num = ans[i];//将第一个遇到的ans[i] =1,并且将1赋值给num
			sum = 1;//计数重置
		}
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值