题目来源:西工大计算机(微信公众号)
字符串匹配解决方法和连阴雨参考该篇博客
六数码和真值表问题来自该篇博客
第一题:求三个数中最小的一个
输入样例:5 3 98
输出样例:3
#include<iostream>
using namespace std;
int min1(int n1, int n2, int n3)
{
if (n1 < n2)
{
if (n1 < n3)
return n1;
else
return n3;
}
else
{
if (n2 > n3)
return n3;
else
return n2;
}
}
int main()
{
int a, b, c;
cout << "Please input:";
cin >> a >> b >> c;
cout << min1(a, b, c) << endl;
return 0;
}
第二题:十进制转化为二进制
输入样例:1030
输出样例:10000000110
实际中解决问题时,十进制转换为二进制是通过长除法来实现,本次数制转换也可以通过这种思想,编程解决实际问题。
长除法10进制转换为2进制是将余数写在一侧,商写在底下,计算结束后将余数逆写便为转换而成的目标字符串。递归调用刚好有这一特性,递归结束后,位于递归调用语句后的语句的执行顺序和各个被调用函数的顺序相反。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
void convto(char c[], int n1, int n2)//进制转换函数,n1为待转换数,n2为目标进制,将n1转化为n2进制的数据
{
int len; //转换而成的字符串长度;
char bit[] = { "0123456789ABCDEF" };//最大可转换为16位;
if (n1 == 0) //0转化为空
{
strcpy(c, "");
return;
}
convto(c, n1 / n2, n2); //递归,递归结束之后,逆调用方向输出下列语句;
len = strlen(c);
c[len] = bit[n1 % n2]; //bit对应位和目标字符串一一对应
c[len + 1] = '\0';
}
int main()
{
char c[20] = {}; //c用来保存转换而成的字符串
int number;
cin >> number; //输入待转换数字
convto(c, number, 2);//调用进制转换子函数
cout << c<<endl;
return 0;
}