题解分享
题解分享简介
幸运数字(结果填空) - 题解
python暴力法(最易理解)
分别运用了转二进制、八进制和十六进制的函数,十六进制数的求和需要稍做处理(将列表中的每个数还原成二进制才能sum)
```
i = 0
num = 0
while i < 2023:
num += 1
ten = num % (sum(list(map(int,str(num)))))
two = num % (sum(list(map(int,str(bin(num)).lstrip('0b')))))
eight = num % (sum(list(map(int,str(oct(num)).lstrip('0o')))))
sixteenList = list(str(hex(num)).lstrip('0x'))
for t in range(len(sixteenList)):
sixteenList[t] = int(sixteenList[t], 16)
sixteen = num % sum(sixteenList)
if ten == two == eight == sixteen == 0:
i += 1
print(num)
```
查看全文
0
0
1
1
幸运数字(结果填空) - 题解
Python代码
```
def lucky_find(n):
x = 1#遍历数
need=0#检测数/已满足需求数
mapping = {
2: 0,
8: 1,
10: 2,
16: 3}#映射字典
while n>need:
sum_x = [0] * 4
for i in [2,8,10,16]:
p=x
while p:
sum_x[mapping[i]]+=p%i
p//=i
if x%sum_x[mapping[i]]:break#如果存在任意一个进制不是哈沙德数,就跳出
else:need+=1
x += 1
return x-1
lucky_number = lucky_find(2023)
print(f"第2023个幸运数字的十进制表示为:{lucky_number}")
```
查看全文
0
0
1
1
幸运数字(结果填空) - 题解
$(126)_{10}mod(7+e) 不是字符串相加 直接看成7+14=21即可$
```
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
bool check(int x)
{
int tmp=x;
int sum=0;
while(tmp)
{
sum+=tmp%10;
tmp/=10;
}
if(x%sum)return false;
tmp=x;
sum=0;
while(tmp)
{
sum+=tmp%2;
tmp/=2;
}
if(x%sum)return false;
tmp=x;
sum=0;
while(tmp)
{
sum+=tmp%8;
tmp/=8;
}
if(x%sum)return false;
tmp=x;
sum=0;
while(tmp)
{
sum+=tmp%16;
tmp/=16;
}
if(x%sum)return false;
return true;
}
int main()
{
int t=0;
for(int i=1;;i++)
{
if(check(i))t++;
if(t==2023)
{
cout<<i<<endl;
return 0;
}
}
return 0;
}
```
查看全文
0
0
1
0
幸运数字(结果填空) - 题解
c++无脑暴力
```
#include<bits/stdc++.h>
using namespace std;
int check(int i)//纯暴力,按照十进制方法照猫画虎,然后判断是否都满足
{
int cnt = 0;//计数器,返回时用来判断i是否满足要求
int sum = 0;//每一位和
int j = i;//每个进制判断后,给j不断恢复传入的i的值
//十进制
while(j > 0)//获取每一位的和
{
sum += j % 10;
j /= 10;
}
if(i % sum == 0){//判断是否可以整除
cnt ++;
}
//二进制
j = i;
sum = 0;
while(j > 0)
{
sum += j % 2;
j /= 2;
}
if(i % sum == 0){
cnt ++;
}
//八进制
j = i;
sum = 0;
while(j > 0)
{
sum += j % 8;
j /= 8;
}
if(i % sum == 0){
cnt ++;
}
//十六进制
j = i;
sum = 0;
while(j > 0)
{
sum += j % 16;
j /= 16;
}
if(i % sum == 0){
cnt ++;
}
if(cnt == 4)return 1;//四种情况都符合,说明是需要的i
else return 0;
}
int main()
{
int i = 0, cnt = 0;//i是当前的数,cnt记录有几个需要的数
while(cnt < 2023)//找到第2023个
{
++ i;//i递增
cnt += check(i);
}
cout << i;//输出结果
return 0;
}
```
查看全文
0
0
0
2
幸运数字(结果填空) - 题解
```
public class Main {
public static void main(String[] args) {
int count = 0, index = 0;
while (count < 2023) {
index++;
if (check(index, 2) && check(index, 8) && check(index, 10) && check(index, 16)) {
count++;
}
}
System.out.println(index);
}
static boolean check(int n, int x) {
int mod = 0;
//将n转化为x进制的字符串
String s = Integer.toString(n, x);
for (int i = s.length() - 1; i >= 0; i--) {
//截取字符串每一位,并且求和
mod += Integer.valueOf(String.valueOf(s.charAt(i)), x);
}
return n%mod==0;
}
}
```
查看全文
0
0
0
2
幸运数字(结果填空) - 题解
public class Main {
```
public static void main(String[] args) {
int no=0,num=1;
while(no<2023) {
if (judge(num, 2)&&judge(num, 8)&&judge(num, 10)&&judge(num, 16)) {
no++;
}
num++;
}
System.out.println(num-1);
}
public static boolean judge(int num,int jz) {
int he=0,chushi=num;
boolean flag=false;
while (num>0) {
he+=num%jz;
num/=jz;
}
if (chushi%he==0) {
flag=true;
}
return flag;
}
```
}
查看全文
0
0
0
1
幸运数字(结果填空) - 题解
```
#include <iostream>
using namespace std;
bool check(int x,int n)
{
int q=x;
int t=0,res=0;
while(x)
{
t=x%n;
x/=n;
res+=t;
}
return q%res==0;
}
int main()
{
int n;
cin>>n;
int cnt=0;
for(int i=1;;i++)
{
int x=i;
if(check(x,2)&&check(x,10)&&check(x,8)&&check(x,16)) cnt++;
if(cnt==n)
{
cout<<x;
break;
}
}
return 0;
}
```
查看全文
0
0
0
1



