请您写一个reverseAdd函数,该函数根据输入的两个正整数a和b,然后分别将它们的数字按照高位在右边的方式反转后求和。
例如,reverseAdd(123,456)==321+654 ==975
函数原型:int reverseAdd(int a,int b);
输入:
输入的a,b参数均为有效取值范围[1,70000]区间上的正整数。
100和200反转后的值为1和2(前导0被忽略)
123,456
结果: 975
此题的关键之处,在于对输入的数进行反转输出。
假如输入一个 123,可看出123=100+20+3,我们要求得到
321=300+20+1;
首先把3分离出来 result = 123 % 3 ;当分离出3后,应该前进一位,即,12=123/10;然后继续分离。
实际演化过程为:
3->30->32->320->321.分离后发现是个循环累加的过程。
处理的代码如下:
int void reverse(int a){
int result=0;
while(a){
result += a%10;
result *=10;
a/=10;
}
return result/10;
}
注意:result 最后多乘了10,最后得除去。
此题的完整代码(C++):
#include
using namespace std;
int reverseAdd(int a,int b){
int result=0;
int result_A=0;
int result_B=0;
if(a<1||a>70000||b<1||b>70000){
return -1;
}else{
while(a){
result_A+=a%10;
result_A*=10;
a/=10;
}
while(b){
result_B+=b%10;
result_B*=10;
b/=10;
}
return (result_A+result_B)/10;
}
}
int main() {
int a,b;
char c;
while(cin>>a>>c>>b){
cout<
注:输入123,456 中间有个逗号,是个坑,我是通过定义一个字符来处理,若有你更好方法,欢迎交流 :-D
骰子是一个立方体,每个面一个数字,初始为左1,右2,前3(观察者方向),后4,上5,下6,用123456表示这个状态,放置到平面上,可以向左翻转(用L表示向左翻转1次),可以向右翻转(用R表示向右翻转1次),可以向前翻转(用F表示向前翻转1次),可以向后翻转(用B表示向后翻转1次),可以逆时针旋转(用A表示逆时针旋转90度),可以顺时针旋转(用C表示顺时针旋转90度),现从初始状态开始,根据输入的动作序列,计算得到最终的状态。
初始状态为: 123456
输入只包含LRFBAC的字母序列,最大长度为50,可重复
RA
结果: 436512
此题的关键之处,是对不同的翻转或旋转,判断数组中元素位置的互调。
注意:左翻或右翻,前后位置不变,前翻或后翻,左右位置不变,旋转上下不变。
此题的完整代码(C++):
#include<iostream>
using namespace std;
int main()
{
string fz;
int arr[6]={1,2,3,4,5,6};
int i,j;
int temp1,temp2;
cin>>fz;
for(i=0;i<fz.size();i++){
if(fz[i]=='R'){
temp1=arr[5];
arr[5]=arr[1];
arr[1]=temp1;
temp2=arr[4];
arr[4]=arr[0];
arr[0]=temp2;
}
if(fz[i]=='L'){
temp1=arr[5];
arr[5]=arr[0];
arr[0]=temp1;
temp2=arr[4];
arr[4]=arr[1];
arr[1]=temp2;
}
if(fz[i]=='F'){
temp1=arr[5];
arr[5]=arr[3];
arr[3]=temp1;
temp2=arr[4];
arr[4]=arr[2];
arr[2]=temp2;
}
if(fz[i]=='B'){
temp1=arr[5];
arr[5]=arr[2];
arr[2]=temp1;
temp2=arr[4];
arr[4]=arr[3];
arr[3]=temp2;
}
if(fz[i]=='A'){
temp1=arr[3];
arr[3]=arr[0];
arr[0]=temp1;
temp2=arr[2];
arr[2]=arr[1];
arr[1]=temp2;
}
if(fz[i]=='C'){
temp1=arr[2];
arr[2]=arr[0];
arr[0]=temp1;
temp2=arr[3];
arr[3]=arr[1];
arr[1]=temp2;
}
}
for(j=0;j<6;j++){
cout<<arr[j];
}
}
注:可用switch进行控制。关键在于使用什么样的数据结构,这里采用数组。
小K是X区域的销售经理,他平时常驻“5”城市,并且经常要到“1”,“2”,“3”,“4”,“6”城市出差。当机场出现大雾情况时,会导致对应城市的所有航班的起飞及降落均停止(即不能从该城市出发,其他城市也不能到达该城市)。小K希望知道如果他需要到X城市出差时,如果遇到Y城市出现大雾,他最短的飞行时间及飞行路径。
注意:当两个城市间不可达时,消耗时间默认取1000.各城市间的飞行时间如下表所示,加粗列代表始发城市,加粗行代表终点城市,矩阵中的值代表从始发城市飞行到终点城市所耗时间(单位小时),M代表不可达(注意飞行线路是单向的,即A->B 不等于 B->A)
例如:
1)从1号城市飞行到4号城市花费5h,从4号城市飞到1号城市花费2h
2) 从5号城市飞行到3号城市不可达,从3号城市飞行到5号城市花费7h.
1 2 3 4 5 6
1 0h 2h 10h 5h 3h M
2 M 0h 12h M M 10h
3 M M 0h M 7h M
4 2h M M 0h 2h M
5 4h M M 1h 0h M
6 3h M 1h M 2h 0h
输入出差城市X(X可为1,2,3,4,5,6)
输入大雾城市Y(Y可为0,1,2,3,4,5,6,为0代表没有城市出现大雾)
2
4
6
{5,1,2}
此题的关键之处,占个位,后面补充。
注意:。
此题的完整代码(C++):
如有不妥当之处,请指出,谢谢:-D