10 条题解

  • 1
    @ 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";
    }
    
    • 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; }

          • -1
            @ 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; }

            • -2
              @ 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.;
              }
              
              • -3
                @ 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; }

                • -4
                  @ 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; }

                  • -4
                    @ 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; }

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

                      标题

                      思路

                      解题方法

                      复杂度

                      时间复杂度:

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

                      空间复杂度:

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

                      Code

                      • 1

                      信息

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