一、字符串分解
按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”
分析思路:
容易题
1.获得字符串的长度length后,判断与要输出位数N的大小,大于N的话,直接printf前N位字符,然后length-=N;
2.再次循环判断与要输出位数N的大小,如果小于N的话,输出length个字符和n-length个0字符。
3.重复循环直到length<0。
#include
using namespace std;
void resolve(char *str, int N){
int length = strlen(str); //获得字符串的长度length
char strtemp[255];
while (length>0){ //循环直到length<0
if (length >= N) //大于N,直接printf前N位字符
{
int i;
for (i = 0; i<N; i++)
{
strtemp[i] = *str;
str++;
}
strtemp[i] = '\0'; 记得添加\0
}
else //小于N,输出length个字符和n-length个0字符
{
int i;
for (i = 0; i
{
strtemp[i] = *str;
str++;
}
for (i = length; i<N; i++)
{
strtemp[i] = '0';
}
strtemp[i] = '\0';
}
cout << strtemp << " ";
length -= N;
}
}
int main(){
int M, N;
char str[255];
cin >> M >> N;
for (int i = 0; i
{
cin>>str;
resolve(str, N);
}
system("pause");
return 0;
}
二、拼音转数字
输入是一个只包含拼音的字符串,请输出对应的数字序列。转换关系如下:
描述: 拼音 yi er san si wu liu qi ba jiu
阿拉伯数字 1 2 3 4 5 6 7 8 9
输入字符只包含小写字母,所有字符都可以正好匹配
运行时间限制:无限制
内存限制: 无限制
输入: 一行字符串,长度小于1000
输出: 一行字符(数字)串
样例输入: yiersansi
样例输出: 1234
#include
#include
using namespace std;
void convert(vector<char> input)
{
int i;
int length = input.size();
for (i = 0; i < length;)
{
switch (input[i])
{
case 'y':
cout << "1";
i += 2;
break;
case 'e':
cout << "2";
i += 2;
break;
case 's':
if (input[i + 1] == 'a')
{
cout << "3";
i += 3;
}
else
{
cout << "4";
i += 2;
}
break;
case 'w':
cout << "5";
i += 2;
break;
case 'l':
cout << "6";
i += 3;
break;
case 'q':
cout << "7";
i += 2;
break;
case 'b':
cout << "8";
i += 2;
break;
case 'j':
cout << "9";
i += 3;
break;
}
}
printf("\n");
}
int main()
{
char c;
vector<char> str;
while (cin >> c)
{
str.push_back(c);
}
convert(str);
system("pause");
return 0;
}
三、去除重复字符并排序
运行时间限制:无限制
内容限制: 无限制
输入: 字符串
输出: 去除重复字符并排序的字符串
样例输入: aabcdefff
样例输出: abcdef
#include
#include
using namespace std;
void fun(char *str){
map<char, int> m;
int length = strlen(str);
for (int i = 0; i
{
m[str[i]] += 1;
}
map<char, int>::iterator it;
for (it = m.begin(); it != m.end(); it++)
{
cout << (*it).first;
}
cout << endl;
}
int main(){
char str[255];
while (cin >> str)
{
fun(str);
}
return 0;
}
四、等式转换
输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。
1 2 3 4 5 6 7 8 9 = X
比如:
12-34+5-67+89 = 5
1+23+4-5+6-7-8-9 = 5
请编写程序,统计满足输入整数的所有整数个数。
输入: 正整数,等式右边的数字
输出: 使该等式成立的个数
样例输入:5
样例输出:2
#include
#include
using namespace std;
const char sym[3] = { ' ', '+', '-' };
int target = 0, hitCount = 0, flag = 1;
char opts[10];
/*
* lastSum,curRes分别保存上一个符号之前的计算结果与当前的数字结果,
* 如1+2+345搜索到4的时候lastSum保存1+2+3的结果,curRes保存34
* flag保存正负号相关的计算因子
*/
void Recursive_permutation(int lastSum, int curRes, char curOpt, int curNum)
{
/* 这行代码用于记录结果运算符*/
opts[curNum] = curOpt;
if (curOpt == sym[0])
{
curRes = curRes * 10 + flag * curNum;
}
else
{
lastSum += curRes;
flag = (curOpt == sym[1]) ? 1 : -1;
curRes = flag * curNum;
}
if (curNum == 9)
{
lastSum += curRes;
if (lastSum == target)
{
++hitCount;
/* 这段代码用于打印结果式子进行对照 */
for (int i = 1; i <= 9; i++)
{
if (opts[i] != ' ')
{
cout << opts[i];
}
cout << i;
}
cout << endl;
}
lastSum = curRes = 0;
flag = 1;
}
else
{
for (int i = 0; i < 3; i++)
{
int newNum = curNum + 1;
Recursive_permutation(lastSum, curRes, sym[i], newNum);
}
}
}
int main()
{
cin >> target;
Recursive_permutation(0, 0, ' ', 1);
cout << hitCount << endl;
system("pause");
}