40分代码
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
string str;
vector<int>seq1;
//将字符串s转换成seq1的操作
vector<int>seq2;
vector<int>seq3;
int w,s;
//宽度,加密级别
int types(char c)
{
if(c>='A'&&c<='Z')
return 1;
//大写字母
else if(c>='a'&&c<='z')
return 2;
//小写字母
else if(c>='0'&&c<='9')
return 3;
}
void change(char x1,char x2)
{
int type1=types(x1),type2=types(x2);
if(type1==type2)
return;
//不需要转换
int x=type1*10+type2;
switch(x)
{
case 12:
{
seq1.push_back(27);
break;
}
case 13:
{
seq1.push_back(28);
break;
}
case 21:
{
seq1.push_back(28);
seq1.push_back(28);
break;
}
case 23:
{
seq1.push_back(28);
break;
}
case 31:
{
seq1.push_back(28);
break;
}
case 32:
{
seq1.push_back(27);
break;
}
}
}
//从x1转换成x2,往seq1中加入一些东西
int main()
{
cin>>w>>s>>str;
if(s==-1)
s=0;
else
{
s=pow(2,s+1);
}
change('A',str[0]);
for(int i=0;i<str.size();i++)
{
char c=str[i];
int type=types(c);
switch(type)
{
case 1:
{
seq1.push_back(c-'A');
break;
}
case 2:
{
seq1.push_back(c-'a');
break;
}
case 3:
{
seq1.push_back(c-'0');
break;
}
}
if(i!=str.size()-1)
{
change(str[i],str[i+1]);
}
}
//得到转换之后的序列
if(seq1.size()%2==1)
{
seq1.push_back(29);
}
//补充形成偶数个
int sum1=1;
//记录长度的数字有一个
int sum2=seq1.size()/2;
//有效字符的个数
int sum3=(w-(sum1+sum2+s)%w)%w;
//填充字符的个数
seq2.push_back(sum1+sum2+sum3);
int t=0;
for(int i=1;i<=sum2;i++)
{
seq2.push_back(30*seq1[t]+seq1[t+1]);
t+=2;
}
for(int i=1;i<=sum3;i++)
{
seq2.push_back(900);
}
if(s==0)
{
for(int i=0;i<seq2.size();i++)
cout<<seq2[i]<<endl;
}
else
{
}
}
CSP202112-3--->登机牌条码
最新推荐文章于 2024-03-23 21:03:47 发布