题目一:
返回无重复幂因子的 N进制完美数之和的所有幂因子。题目太长了,总的来说就是给你一个R和N,用N的幂来组成R且不能使用重复的N的幂。返回幂的集合。
例如R=33,N=3,那么33=3+3+3^3。就是使用了重复的幂,此时返回空集。
解析:
可以举实例进行分析,该题就是进制转换问题。把R转换为N进制,N进制每一位不能大于1,然后返回为1的位。
Solution:
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
vector<int> GetPowerFactor(int R, int N)
{
queue<int> que;
vector<int> vec;//存储结果
if (N == 1)
{
for (int i = 0; i < R; i++)
vec.push_back(i);
return vec;
}
/*转换为N进制*/
while (R)
{
if (R % N > 1) return vec;//每一位都小于等于1
que.push(R % N);
R = R / N;
}
int t = 0;
while (!que.empty())
{
if (que.front() == 1) vec.push_back(t);
que.pop();
t++;
}
return vec;
}
int main()
{
int R, N;//输入的判断数R和N进制
cin >> R >> N;
vector<int> res;
res = GetPowerFactor(R, N);
int n = res.size();
for (int i = 0; i < n; i++)
cout << res[i] << " ";
cout << endl;
return 0;
}
题目二:待明白~~
给定一字符矩阵m* n,其中标为 ’ * ’ 的地方不能坐人,标为 ‘.’ 的地方能做人。因为疫情影响,要求每个人相邻的位置不能有人。求这一矩阵最多能坐下多少人。相邻:上下左右四个位置为相邻
例如:
[[’’, ‘.’, '’, ‘’, ‘.’],
[’’, ‘.’, ‘’, '’, ‘’],
[’’, ‘.’, ‘’, '’, ‘.’]]
最多能坐 4 个人。
相似题目: https://www.cnblogs.com/flightless/p/12309522.html
状态压缩DP