开摆君 题解分享 · 2024/4/6
幸运数字(结果填空) - 题解
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
undefine 题解分享 · 2024/4/4
幸运数字(结果填空) - 题解
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
acmer10 题解分享 · 2024/4/3
幸运数字(结果填空) - 题解
$(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
desert 题解分享 · 2024/4/7
幸运数字(结果填空) - 题解
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
nihao 题解分享 · 2024/4/5
幸运数字(结果填空) - 题解
``` 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
clearcold 题解分享 · 2024/4/6
幸运数字(结果填空) - 题解
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
2835778687 题解分享 · 2024/4/6
幸运数字(结果填空) - 题解
``` #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