第一题、输入一个正整数,并编码为字符串进行输出
描述: 1、输入一个正整数,并编码为字符串进行输出。
编码规则为:数字0-9分别编码为字符a-j
2、输入肯定是正整数,不用做错误较验
运行时间限制: 无限制
内存限制: 无限制
输入: 正整数
输出: 字符串
样例输入: 123
样例输出: bcd
答案提示: 编写一个main函数实现该功能算法。
void numberToLetter(char* inputStr , char* outputStr){
int len = strlen(inputStr);
int i = 0;
for(i = 0 ; i < len ; ++i){
outputStr[i] = inputStr[i] - '0' + 'a';
}
outputStr[i] = '\0';
}
第二题、计算最后一个出列者的编号
描述: 现在有n个竞争者围坐一圈,争夺一个很有吸引力的工作(年薪100w $)。假设这些人编号1,2,。。。,n。第一次从1开始报数,数到m(m>0)的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列。以此类推,直到所有人出列为止。老板说最后一个出列的人将获得这份工作。
如果你也想竞争这份工作,那么你会坐着哪个位置上?
实现一个函数,当老板告诉你n和m时,返回得到工作的那个人的编号。
运行时间限制: 无限制
内存限制: 无限制
输入: 竞争者人数,报数
输出: 最后出列的竞争者的编号。异常则返回 -1。
样例输入: 10,10
样例输出: 8
答案提示: 约瑟夫环或者数组
第三题、条件表达式求值
描述: 给定一个以字符串形式表示的算术表达式,计算该表达式的值。
表达式支持如下运算:“+、-、*、/”,其中“*”和“/”的优先级要高于“+”和“-”;
不需要考虑括号,且表达式之间没有空格;
例如:对于表达式"3-2+15*2",该表达式值为31.
运行时间限制: 60 Sec
内存限制: 256 MByte
输入: 加减乘除四则运算表达式,长度不超过1024字节,运算式中不含有括号和空格。
输出: 表达式的运算结果。
样例输入: 3-2+15*2
样例输出: 31
答案提示: 2个栈
void cal(char * a){
int len = strlen(a);
stack<int> s1;
stack<char> s2;
int k = 0;
int sum =0;
int sum1 = 0;
int count =0;
while(k <= len){
if(a[k] <= '9' && a[k] >= '0'){
sum = 0;
while(a[k]<= '9' && a[k] >= '0' ){
sum = sum * 10 + a[k] - '0';
++k;
}
s1.push(sum);
}else{
if(!s2.empty()){
if(s2.top() == '*'){
s2.pop();
int number1 = s1.top();
s1.pop();
int number2 = s1.top();
s1.pop();
int tt = 0;
tt = number2 * number1;
s1.push(tt);
}else if(s2.top() == '/'){
s2.pop();
int number1 = s1.top();
s1.pop();
int number2 = s1.top();
s1.pop();
int tt = 0;
tt = number2 / number1;
s1.push(tt);
}
}
if(k != len){
s2.push(a[k]);
}
++k;
}
}
sum1 = s1.top();
s1.pop();
char ch;
int temp;
while(!s2.empty()){
ch = s2.top();
temp = s1.top();
s1.pop();
s2.pop();
if(ch == '+'){
sum1 = temp + sum1;
}else if(ch == '-'){
sum1 = temp - sum1;
}
}
cout<<sum1<<endl;
}