标签:
注:编译环境为Visual Studio 2012,答案仅供参考。
41.输入m个字符串 和一个整数n, 把字符串M化成以N为单位的段,不足的位数用0补齐。
如 n=8 m=9 ,
123456789划分为:12345678
90000000
123化为 :12300000
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
getline(cin,s);
int n;
cin >> n;
for (unsigned i = 0; i < s.size(); i++)
{
cout << s[i];
if ((i+1) % n == 0) cout << " ";
}
int residual = s.size() % n;
if (!residual)
{
cout << endl;
return 0;
}
for (int i = 0; i < n - residual; i++)
{
cout << "0";
}
cout << endl;
return 0;
}
42.整数化为2进制数,32位长度。然后逆序输出
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> v(32,0);
int i = 31;
while (n != 0)
{
v[i--] = n % 2;
n /= 2;
}
for (auto b = v.rbegin();b != v.rend();++b){
cout << *b;
}
cout << endl;
return 0;
}
43.0-1背包问题
给定一个数,比如20
然后 再给定几个数字 1 3 5 7 8
1 3 5 7 8
0 0 1 1 1
因为5+7+8=20
#include <iostream>
#include <vector>
using namespace std;
bool find(int value, int n, const vector<int> &v, vector<bool> &flags){
if (value == 0)
{
return true;
}
if ((value > 0 && n <= 0) || value < 0)
{
return false;
}
if (find(value - v[n-1], n-1, v, flags))
{
flags[n-1] = 1;
return true;
}
return find(value, n-1, v, flags);
}
int main()
{
int value;
cin >> value;
vector<int> v;
vector<bool> flags;
int num;
while (cin >> num && num != 0)
{
v.push_back(num);
flags.push_back(false);
}
if (find(value, v.size(), v, flags))
{
for (unsigned i = 0; i < flags.size(); i++)
{
cout << flags[i] << " ";
}
cout << endl;
return 0;
}
cout << "ERRPR" << endl;
return 0;
}
44.输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50
#include <iostream>
#include <string>
using namespace std;
bool minAddMax(int a[], int n, int &result){
if (n <= 0 || n > 50)
{
return false;
}
int min = a[0], max = a[0];
for (int i = 1; i < n; i++)
{
if (a[i] < min)
{
min = a[i];
}
if (a[i] > max)
{
max = a[i];
}
}
result = min + max;
return true;
}
int main()
{
int a[] = {1,2,3,4,5};
int result = 0;
cout << (minAddMax(a,5,result) ? to_string(result) : "ERROR") << endl;
return 0;
}
45.子串转换:
将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。
要求实现函数:
void convert(char input,char output)
【输入】 char *input , 输入的字符串
【输出】 char *output ,输出的字符串
【返回】 无
#include <iostream>
using namespace std;
void convert(char *input,char* output){
while (*input != ‘\0‘)
{
char *ahead = input + 1;
if (*ahead == *input)
{
*output++ = ((*input++) - ‘a‘ + 1) % 26 + ‘a‘;
*output++ = ((*input++) - ‘a‘ + 2) % 26 + ‘a‘;
continue;
}
*output++ = ((*input++) - ‘a‘ + 1) % 26 + ‘a‘;
}
*output = ‘\0‘;
}
int main()
{
char input[100],output[100];
cin.getline(input,100);
convert(input, output);
cout << output << endl;
return 0;
}
标签:
原文地址:http://blog.csdn.net/sps900608/article/details/52198786