日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

B1091 N-自守数 (15分)

發(fā)布時(shí)間:2025/5/22 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 B1091 N-自守数 (15分) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

B1091 N-自守?cái)?shù) (15分)

如果某個(gè)數(shù) \(K\)的平方乘以\(N\) 以后,結(jié)果的末尾幾位數(shù)等于 \(K\),那么就稱這個(gè)數(shù)為“\(N\)-自守?cái)?shù)”。例如 \(3×92 ?^2 ?=25392\),而 25392 的末尾兩位正好是 92,所以 92 是一個(gè) 3-自守?cái)?shù)。

本題就請(qǐng)你編寫程序判斷一個(gè)給定的數(shù)字是否關(guān)于某個(gè) N 是 N-自守?cái)?shù)。

輸入格式:

輸入在第一行中給出正整數(shù) \(M(≤20)\),隨后一行給出 \(M\) 個(gè)待檢測(cè)的、不超過 1000 的正整數(shù)。

輸出格式:

對(duì)每個(gè)需要檢測(cè)的數(shù)字,如果它是 \(N\)-自守?cái)?shù)就在一行中輸出最小的 $N $和 \(NK ?^2\)
的值,以一個(gè)空格隔開;否則輸出 No。注意題目保證 \(N<10\)

輸入樣例:

3 92 5 233

輸出樣例:

3 25392 1 25 No

思路

對(duì)0-9逐一檢驗(yàn)
9000000
為什么我的代碼有一個(gè)測(cè)試點(diǎn)過不去。
因?yàn)閷?duì)0所有數(shù)都會(huì)自守的,對(duì)一些特殊的數(shù)要特別看待。

#include<bits/stdc++.h> using namespace std;int tmp_ans[9]; int ans[9];int change(int a[],int b){int num = 0;while(b!=0){a[num++]=b%10;b/=10;}return num; } int main(void){int m,tmp,tmp_num,num,true_ans;int flag; scanf("%d",&m);getchar();for(int i=0;i<m;i++){//對(duì)每個(gè)數(shù)都處理一次標(biāo)記 flag = -1;scanf("%d", &tmp);//要判斷有幾位數(shù),最大是4位 tmp_num=change(tmp_ans,tmp);for(int j=0;j<10;j++){flag = -1;true_ans=tmp*tmp*j;num=change(ans,true_ans);for(int k=0;k<tmp_num;k++){if(ans[k]!=tmp_ans[k]){flag = k;break;} }if(flag==-1){printf("%d %d\n",j,true_ans);break;} }if(flag!=-1)printf("No\n");/*無自守?cái)?shù)*/}return 0; }

AC代碼

/*消去0這個(gè)自守。*/ for(int j=1;j<10;j++)

來自別人的AC代碼

不是暴力而是數(shù)學(xué)的寫法。

作者:dk_qi
鏈接:https://www.jianshu.com/p/c59448ce5414

以題中\(3×92^2=25392\)為例,當(dāng)數(shù)\(K\)\(92\),自守?cái)?shù)\(N\)\(3\)時(shí),有
(3×92×92-92)% 100 = 0
推廣即得
(NKK-K) % ( 10 ^ {length( K ) } ) = 0

#include<stdio.h>int len(int K); //該函數(shù)返回10的K的長度次方。int main() {int M, K, l, flag;scanf("%d", &M);for(int i = 0; i < M; i++){scanf("%d", &K);l = len(K);flag = 0; // flag標(biāo)記K是否有自守?cái)?shù)for(int j = 0; j < 10; j++){if((j * K * K - K) % l == 0){printf("%d %d\n", j, j*K*K);flag = 1;break;  //得到最小自守?cái)?shù)后直接break}}if(flag == 0) printf("No\n");} return 0; }int len(int K){int len = 1;while(K){len *= 10;K /= 10;}return len; }

轉(zhuǎn)載于:https://www.cnblogs.com/lingr7/p/10296029.html

總結(jié)

以上是生活随笔為你收集整理的B1091 N-自守数 (15分)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。