送外卖

来源:互联网 发布:python字典添加元素 编辑:程序博客网 时间:2024/04/27 19:02

题目描述

冬天到了,小伙伴们都懒得出去吃饭了,纷纷打电话叫起了外卖。送外卖的小哥想找出一条最短的路径,小区门口进来,送完外卖又回到小区门口。整个小区是一个由m*n个边长为1的正方形组成的矩形,各幢公寓楼分布于正方型的顶点上,小区门口位于左上角。每幢楼与相邻的八个方向的楼之间都有道路。下图为m=2,n=3的小区地图,并且外卖小哥要经过的最短路径为6。

输入描述:

输入有多组数据。每组数据包含两个整数m (2≤n≤2^128) 和n (2≤r≤2^128),分别代表行数和列数。


输出描述:

对应每一组数据,输出外卖小哥需要经过的最短路径。结果保留两位小数。

输入例子:

2 23 3

输出例子:

4.00

9.41

代码:

#include <iostream>  #include <string>  #include <vector>  #include <stdlib.h>  using namespace std;  struct bigcheng{      vector<int> a;      vector<int> b;      string result_str;  };  //字符串转换为数字并反转void chartonum(string a,string b,bigcheng &tempcheng){      int size_a = a.size();      int size_b = b.size();      for (int i = size_a-1;i >= 0;i--){          tempcheng.a.push_back(a[i] - '0');      }      for (int i = size_b-1;i >= 0;i--){          tempcheng.b.push_back(b[i] - '0');      }  }  //逐位相乘,处理进位消除多余的0  void multiply(bigcheng &tempcheng,vector<int> &result_num){      for(int i = 0;i < tempcheng.a.size();i++){          for(int j = 0;j < tempcheng.b.size();j++){              result_num[i+j] += (tempcheng.a[i]) * (tempcheng.b[j]);//结果存放在result_num[i+j]中        }      }      for (int i = result_num.size() - 1;i >= 0;i--){          if (result_num[i] != 0){              break;          }else              result_num.pop_back();      }      int c = 0;      for(int i = 0;i < result_num.size();i++){ //处理进位         result_num[i] += c;          c = result_num[i] / 10;          result_num[i] = result_num[i] % 10;      }      if(c != 0){          result_num.push_back(c);      }  }  //将计算结果转换为字符串并反转 void numtochar(bigcheng &tempcheng,vector<int> &result_num){   int size = result_num.size();      for(int i = 0;i < result_num.size();i++){          tempcheng.result_str.push_back(static_cast<char>(result_num[size-1-i]+'0'));      }  }  int main(){string a,b;    while(cin >> a >> b){    bigcheng tempcheng;       chartonum(a,b,tempcheng);      vector<int> resultnum(a.size()+b.size());      multiply(tempcheng,resultnum);      numtochar(tempcheng,resultnum);          if((tempcheng.result_str[tempcheng.result_str.size()-1]-'0') % 2 == 0){            cout << tempcheng.result_str << ".00" << endl;        }else{        cout << tempcheng.result_str << ".41" << endl;}    }}


0 0
原创粉丝点击