10 条题解
-
1
问题简述
输入自然数 ,判断 是否各个数位都相等。
思路
- 先取 的个位数(即 ),作为基准值 。
- 然后,通过循环不断去除 的个位数(即 除以 的整数部分),并检查每次剩余的数的个位数是否与基准值 相等。
- 如果在任何一个时刻发现不相等,即可判断 的所有数位上的数字不相等,输出
No
并结束程序。 - 如果循环结束(即 被除尽)且所有数位上的数字都与基准值 相等,则输出
Yes
。
代码
#include <iostream> using namespace std; int n; int main() { cin >> n; n *= 37; int c = n % 10; while(n){ if(n % 10 != c){ cout << "No"; return 0; } n /= 10; } cout << "Yes"; }
-
0
37的题解
思路
把该数乘于37,求余求出第一位;
把每一位都遍历过去,不一样的话就直接输出“No”再直接结束循环,
这样循环结束并且没输出就说明是OK的,则直接输出“Yes”即可!
解题方法
如思路
复杂度
略
时间复杂度:
略
空间复杂度:
略
Code
#include<bits/stdc++.h> using namespace std; int n; int main(){ ios::sync_with_stdio(0);//加速,可加可不加 cin.tie(0),cout.tie(0); cin>>n; int s=n*37%10;//求出第一位 n*=37; while(n!=0){ if(n%10!=s){//如果不符,直接输出 cout<<"No"; return 0;//结束程序 } n/=10; } cout<<"Yes";//到这,如果程序还没结束就说明可以,则输出 return 0; }
-
0
MX-J3-A 题解
思路
不太懂数学的来将 转换为字符串,再去判断
Code
#include<bits/stdc++.h> #define Yes cout<<"Yes\n" #define No cout<<"No\n" using namespace std; bool check(int x){ stringstream ss; ss<<x; string s; ss>>s; char c=s[0]; for(int i=1;i<sz(s);i++){ if(s[i]!=c){ return false; } } return true; } int main(){ int a; cin>>a; if(check(37*a)){ Yes; }else{ No; } return 0; }
-
0
题目 37 的题解
思路
声明X=37a,用数组b[]将X的每一位保存起来,再逐一比较就OK了。
如何获取X的每一位
由于不知道X的位数,所以用while循环。
CODE:
#include<bits/stdc++.h> using namespace std; int a; int b[1010]; bool s=false; int main(){ cin>>a; int c=37*a; int i=0; while(c!=0){ b[i++]=c%10; c/=10; } for(int j=1;j<i;j++){ if(b[j]!=b[j-1]){ s=true; break; } } if(s==true){ cout<<"No"<<endl; }else{ cout<<"Yes"<<endl; } return 0; }
-
-2
懂点数学的都看得出来
思路
从1至37 * 3737只有以下10个数是37的倍数,每一位都相同:
111 * 1至111 * 9=3 * 1至3 * 9
111111=3003 * 37
解题方法
打表
复杂度
时间复杂度:
空间复杂度:
Code
#include<bits/stdc++.h> using namespace std; int main() { int n; string s="No"; cin>>n; if(n<30&&n%3==0)s="Yes"; if(n==3003)s="Yes"; cout<<s<<endl; return 0.; }
-
-3
思路
很简单,只需要将输入的数字乘上37,再一位一位的判断是不是都是一样的就可以了。
Code
#include<bits/stdc++.h> using namespace std; int main() { int n; scanf("%d",&n); n*=37; int flag=0; int ret=n%10; while(n>0) { if(n%10!=ret) { flag=1; break; } n/=10; } if(flag==0) { printf("Yes"); } else { printf("No"); } return 0; }
-
-4
标题
无
思路
各个数位都相等时必能被与其相同数位的‘1’整除(如位数==3,111;位数=2;11 因此生成这样与其同数位的数在做除法即可
解题方法
1.计算a*37的位数 2.生成 3.取余判断
复杂度
dddd
时间复杂度:
O(n) 添加时间复杂度, 示例:
空间复杂度:
??? 添加空间复杂度, 示例:
Code
#include<bits/stdc++.h> using namespace std; long n,ans,i,s; int main() {cin.tie(0); cin>>n; ans=n37; i=1; s=ans; while(s/10){ s/=10; i++; }s=1; for(long long j=2;j<=i;j++){ s=10; s++; }if(ans%s==0){ cout<<"Yes"; }else{ cout<<"No"; } return 0; }
- 1
信息
- ID
- 40
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 1
- 标签
- 递交数
- 909
- 已通过
- 428
- 上传者