P1320 壓縮技術(續集版)----題目得扣仔細
阿新 • • 發佈:2021-01-24
技術標籤:洛谷
#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