12 条题解

  • 2
    @ 2024-8-25 18:33:49

    问题简述

    输入自然数 aa,判断 37×a37\times a 是否各个数位都相等。

    思路

    • 先取 37a37a 的个位数(即 37amod1037a\bmod 10),作为基准值 cc
    • 然后,通过循环不断去除 37a37a 的个位数(即 37a37a 除以 1010 的整数部分),并检查每次剩余的数的个位数是否与基准值 cc 相等。
    • 如果在任何一个时刻发现不相等,即可判断 37a37a 的所有数位上的数字不相等,输出 No 并结束程序。
    • 如果循环结束(即 37a37a 被除尽)且所有数位上的数字都与基准值 cc 相等,则输出 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";
    }
    
    • 1
      @ 2025-1-12 10:19:28

      求求各位大佬点个赞吧!这是本蒟蒻的第一篇题解!

      解题方法

      已知3x37=111 33*37=1221 3003x37=111111(特判)

      可得当n/3<10 且n%30 或 n3003 成立

      复杂度

      时间复杂度:

      添加时间复杂度, 示例: O(1)O(1)

      空间复杂度:

      添加空间复杂度, 示例: O(1)O(1)

      Code

      #include<bits/stdc++.h>
      using namespace std;
      int main(){
          int a;
          cin>>a;
          if(a%3==0 && a/3<10 || a==3003)cout<<"Yes";
          else cout<<"No";
          return 0;
      }
      
      • 0
        @ 2024-12-26 21:00:49

        标题

        37的题解

        思路

        一种很简单的方法,把 a37a*37 后得到的数记为 aa',令 ppa mod 10a'\ mod\ 10 (其中mod表示对取模数) 只要把aa'不断地除以 1010,判断新的数 mod 10mod\ 10pp 是否相等即可

        复杂度

        时间复杂度:

        O(log10n)O(log_{10}n) 我们期间不断对 aa'/10/10 操作很好理解

        Code

        #include<bits/stdc++.h>
        using namespace std;
        int main()
        {
            int a;
            cin>>a;
            a*=37;
            int p=a%10;
            while(a)
            {
                if(a%10 != p)
                {
                    cout<<"No";
                    return 0;
                }
                a/=10;
            }
            cout<<"Yes";
            return 0;
        }
        
        • 0
          @ 2024-10-7 14:52:15

          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
            @ 2024-10-3 18:19:45

            MX-J3-A 题解

            思路

            不太懂数学的来

            37a37a 转换为字符串,再去判断

            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
              @ 2024-8-26 10:57:07

              题目 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
                @ 2024-9-7 14:12:40

                37 的题解

                思路

                a×37后判断每位是否与各位相等

                时间复杂度:O(n)O(n)

                Code

                #include<bits/stdc++.h> using namespace std; int main() { int a,n,p=0; cin>>a; a*=37; n=a%10; while(a) { if(n!=a%10) { cout<<"No"; return 0; } a/=10; } cout<<"Yes"; return 0; }

                • -3
                  @ 2024-9-18 22:26:03

                  懂点数学的都看得出来

                  思路

                  从1至37 * 3737只有以下10个数是37的倍数,每一位都相同:

                  111 * 1至111 * 9=3 * 1至3 * 9

                  111111=3003 * 37

                  解题方法

                  打表

                  复杂度

                  时间复杂度:

                  O(1)O(1)

                  空间复杂度:

                  O(1)O(1)

                  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.;
                  }
                  
                  • -4
                    @ 2024-8-26 20:12:45

                    思路

                    很简单,只需要将输入的数字乘上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; }

                    • -5
                      @ 2024-8-26 8:07:03

                      #include<bits/stdc++.h> using namespace std; int main() { int a; cin>>a; a*=37; bool flag=false; int q=a%10; a/=10; while(a!=0) { if(a%10!=q) flag=true; q=a%10; a/=10; } if(flag==true) cout<<"No"; else cout<<"Yes"; return 0; }

                      • -5
                        @ 2024-8-25 21:55:43

                        标题

                        思路

                        各个数位都相等时必能被与其相同数位的‘1’整除(如位数==3,111;位数=2;11 因此生成这样与其同数位的数在做除法即可

                        解题方法

                        1.计算a*37的位数 2.生成 3.取余判断

                        复杂度

                        dddd

                        时间复杂度:

                        O(n) 添加时间复杂度, 示例: O(n)O(n)

                        空间复杂度:

                        ??? 添加空间复杂度, 示例: O(n)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; }

                        • -6
                          @ 2024-9-20 20:35:08

                          标题

                          思路

                          解题方法

                          复杂度

                          时间复杂度:

                          添加时间复杂度, 示例: O(n)O(n)

                          空间复杂度:

                          添加空间复杂度, 示例: O(n)O(n)

                          Code

                          • 1

                          信息

                          ID
                          40
                          时间
                          1000ms
                          内存
                          512MiB
                          难度
                          1
                          标签
                          递交数
                          959
                          已通过
                          456
                          上传者