5进制和10进制的互换o,y,e,a,s分别代表 0,1,2,3,4
输入:
1
ya
8
输出:
8
ya
#include<iostream>
#include<unordered_map>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
unordered_map<char, int> msi;
//oyeas
msi.insert(pair<char, int>('o', 0));
msi.insert(pair<char, int>('y', 1));
msi.insert(pair<char, int>('e', 2));
msi.insert(pair<char, int>('a', 3));
msi.insert(pair<char, int>('s', 4));
unordered_map<int, char> mis;
//oyeas
mis.insert(pair<char, int>( 0,'o'));
mis.insert(pair<char, int>( 1,'y'));
mis.insert(pair<char, int>( 2,'e'));
mis.insert(pair<char, int>( 3,'a'));
mis.insert(pair<char, int>( 4,'s'));
int T;
cin >> T;
while (T--)
{
string str = "";
cin >> str;
if (isdigit(str[0]))
{
int t = 0;
for (auto i : str)
{
i = i - '0';
t = t * 10 + i;
}
string tstr = "";
int a = 8; //这里a是一个十进制的数
int b; //b是余数
int c; //c是for循环的变量
for (c = 0; ; c++)
{
b = a % 5; //取余
a = a / 5; //取余后的商,如此反复循环
tstr += mis[b];
if (a < 5) //判断商是否小于5,是就终止循环
{
tstr += mis[a];//输出商的值
break;
}
}
reverse(tstr.begin(), tstr.end());
cout << tstr << endl;
}
else
{
int n = str.size();
int res = 0;
for (auto i : str)
{
int aa = msi[i] * pow(5, --n);
res += aa;
}
cout << res << endl;
}
}
return 0;
}
一个n*m的迷宫用0,1表示方格里是否存在障碍物1表示有障碍物,一个机器人只能向下和向右求有多少出去的方法
输入:
5 5
0 1 0 0 0
0 1 0 0 0
0 1 0 0 0
0 1 0 0 0
0 0 0 0 0
输出:
1
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
vector<vector<int>> vvi(n, vector<int>(m));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
int t = 0;
cin >> t;
vvi[i][j] = t;
}
}
vector<int> dp(m);
dp[0] = (vvi[0][0] == 0);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (vvi[i][j] == 1)
{
dp[j] = 0;
continue;
}
if (j - 1 >= 0)
{
dp[j] += dp[j - 1];
}
}
}
cout << dp.back() << endl;
return 0;
}
给定一个长度为n的01串,求连续1的字串个数
输入:
4
0110
输出:
4
解释:
0110
011
110
11
暂时没写出来