1. 程式人生 > 其它 >P1320 壓縮技術(續集版)----題目得扣仔細

P1320 壓縮技術(續集版)----題目得扣仔細

技術標籤:洛谷

#include <bits/stdc++.h>//luogu福利
using namespace std;

char a,b='0';//注意了:一定是賦值為'0';
int n,ans[1000001],zz=1;//zz是指標的意思,我用來儲存第幾位

int main()
{
 while(cin>>a)
 {
 	n++;
 	if(a==b)
 		ans[zz]++;
 	else
 		ans[++zz]++,//等效於:zz=zz+1;ans[zz]++
 		b=a;//上面用 , 不用 ; 的原因是我沒有打{ }
 }
 cout<<sqrt(n)
;//平方根,用到了<cmath>或者是<math.h>,也就是一行的行數 for(int i=1 ; i<=zz ; i++) cout<<" "<<ans[i]; }

本人的程式碼:

#include <bits/stdc++.h>
using namespace std;
char a[40001];
int b[1000001];
string s;

int main()
{
    int n;
    int j = 1;
    while(cin>>s) {
        n = s.
length(); for(int i=0;i<n;i++){ a[j++] = s[i]; } } printf("%d ",n); j--; int cal=1; int l = 1; char c = '0'; for(int k=1;k<=j;k++) { if(a[k]==c) b[l]++; else{ b[++l]++; c=a[k]; } }
for(int i=1;i<=l;i++){printf("%d ", b[i]);} return 0; }

題目描述

設某漢字由N × N的0和1的點陣圖案組成。

我們依照以下規則生成壓縮碼。連續一組數值:從漢字點陣圖案的第一行第一個符號開始計算,按書寫順序從左到右,由上至下。第一個數表示連續有幾個0,第二個數表示接下來連續有幾個1,第三個數再接下來連續有幾個0,第四個數接著連續幾個1,以此類推……

例如: 以下漢字點陣圖案:

0001000
0001000
0001111
0001000
0001000
0001000
1111111
對應的壓縮碼是: 7 3 1 6 1 6 4 3 1 6 1 6 1 3 7 (第一個數是N ,其餘各位表示交替表示0和1 的個數,壓縮碼保證 N×N = 交替的各位數之和)

輸入格式

漢字點陣圖(點陣符號之間不留空格)。(3<=N<=200)

輸出格式

一行,壓縮碼。

輸入輸出樣例

輸入 #1 複製
0001000
0001000
0001111
0001000
0001000
0001000
1111111
輸出 #1 複製
7 3 1 6 1 6 4 3 1 6 1 6 1 3 7