大家好,我是你们的大白
好的,以后就这样了,懒得写太多
直入主题:
题目描述
设某汉字由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复制
7 3 1 6 1 6 4 3 1 6 1 6 1 3 7
输出 #1复制
0001000 0001000 0001111 0001000 0001000 0001000 1111111
很简单的一题
他说要用到字符串,但我感觉没必要啊
简单极了
我们分析一下:
一共只要两步,第一步输入
第二步输出;
两个循环;
那就一个一个的慢慢分析吧
在分析前,给大家一份“演员表”:
主函数前
1、邀请到的a数组(主角)
2、非常重要的n(二号)
主函数中的第一部分
3、简简单单的输入用的sum1
4、和它差不多的弟弟sum2
5、跑龙套的i
主函数内第二部分
6、j,一个看上去是跑龙套,却掌握着换行大权的东西(四号)
7、一个从跑龙套升到重要角色的i,掌握输出要输出什么(三号)
以上变量全为int类型
第一个部分是输入
愉快的输入
可是,你会发现,它没说输入几个啊?!
但它说了,加起来肯定是N*N
sum1闪亮登场!(我在写时,就有一种预感,感觉肯定还有2,但我不确定,就写上了1)
用来统计加起来是多少;
代码:
cin>>n;
int sum1=0,sum2=0;//sum2是后来加的
for(int i=1;;i++){
cin>>a[i];
sum1+=a[i];
if(sum1==n*n)break;
}
忘说了,先输入n;
第二步要输出了;
这部分比较难,但就是一个for循环
再分成几小部分吧;
第一小部分:判断如果a数组里这个有大于0的数,就输出
想要完成这个,就要先在判断里面让a[i]--
然后,再判断,如果i对二取余等于零,就要输出1,反之输出0(想想为什么)
最后,神秘的j++;
if(a[i]){
a[i]--;
if(i%2==0)cout<<1;
else cout<<0;
//cout<<a[i]<<" "<<i<<" "<<j<<" ";
j++;
}
第二小部分是要如果没有了数,就让i++
else{
i++;
continue;
//cout<<"b"<<" ";
}
最后第三部分是要让j到达6的倍数时换行;
if(j%n==0&&j){
//cout<<"c"<<" ";
cout<<endl;
}
so easy!
可是,就有人要问了,那要怎么控制i呢???
其实很简单哦,我们改进一下第一步:
cin>>n;
int sum1=0,sum2=0;//sum2是后来加的
for(int i=1;;i++){
cin>>a[i];
sum1+=a[i];
sum2++;
if(sum1==n*n)break;
}
可以了吧,只要有一个sum2来统计数量就行了
好了,第二步代码完整:
int j=0;
for(int i=1;i<=sum2;){//试了半天的输出
if(a[i]){
a[i]--;
if(i%2==0)cout<<1;
else cout<<0;
//cout<<a[i]<<" "<<i<<" "<<j<<" ";
j++;
}
else{
i++;
continue;
//cout<<"b"<<" ";
}
if(j%n==0&&j){
//cout<<"c"<<" ";
cout<<endl;
}
}
蓝色回归!
全体代码:
#include<bits/stdc++.h>
using namespace std;
int a[10001],n;
int main(){
cin>>n;
int sum1=0,sum2=0;//sum2是后来加的
for(int i=1;;i++){
cin>>a[i];
sum1+=a[i];
sum2++;
if(sum1==n*n)break;
}
int j=0;
for(int i=1;i<=sum2;){//试了半天的输出
if(a[i]){
a[i]--;
if(i%2==0)cout<<1;
else cout<<0;
//cout<<a[i]<<" "<<i<<" "<<j<<" ";
j++;
}
else{
i++;
continue;
//cout<<"b"<<" ";
}
if(j%n==0&&j){
//cout<<"c"<<" ";
cout<<endl;
}
}
return 0;
}