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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

算法竞赛入门经典读书笔记(二)7.1简单枚举

發(fā)布時(shí)間:2025/6/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法竞赛入门经典读书笔记(二)7.1简单枚举 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

7.1.1簡(jiǎn)單枚舉

除法

輸入正整數(shù)n,按從小到大的順序輸出所有形如abcde/fghij=n的表達(dá)式,其中a~j恰好為數(shù)字0~9的一個(gè)排列,2<=n<=79.

樣例輸入:

62

樣例輸出:

79546/01238=62

94736/01528=62


程序代碼:


[cpp]?view plaincopy
  • #include?<iostream>??
  • using?namespace?std;??
  • int?isright(int,int);??
  • int?main()??
  • {??
  • int?n,i;??
  • while(cin>>n){??
  • for(i=1234;i*n<=98765;i++)??
  • if(i<=9876&&i*n>=12345&&isright(i,i*n))??
  • cout<<i*n<<"/0"<<i<<"="<<n<<endl;??
  • if(i>=10234&&i*n>=56789&&isright(i,i*n))??
  • cout<<i*n<<"/"<<i<<"="<<n<<endl;??
  • }??
  • return?0;??
  • }??
  • int?isright(int?x,int?y){//判斷xy是否是由不同的0~9九個(gè)數(shù)組成的???
  • int?a[10]={0};??
  • for(int?i=0;i<5;i++){??
  • a[x%10]++;??
  • x=x/10;??
  • }??
  • for(int?i=0;i<5;i++){??
  • a[y%10]++;??
  • y=y/10;??
  • }??
  • for(int?i=0;i<10;i++){??
  • if(a[i]!=1)?return?0;??
  • }??
  • return?1;??
  • }??


  • 7.1.2最大乘積

    輸入n個(gè)元素組成的序列s,你需要找出一個(gè)乘積最大的連續(xù)子序列。如果這個(gè)最大的成績(jī)不是正數(shù),應(yīng)輸入-1(表示無解)。輸入0結(jié)束輸入。1<=n<=18,-10<=Si<=10

    樣例輸入:

    3

    2?4?-3

    樣例輸出:

    8

    20

    [cpp]?view plaincopy
  • #include<iostream>??
  • #include<vector>??
  • using?namespace?std;??
  • int?main(){??
  • int?n,m;??
  • vector<int>?ivec;??
  • while(cin>>n){??
  • if(n==0)?break;??
  • for(int?i=0;i<n;i++){??
  • cin>>m;??
  • ivec.push_back(m);??
  • }??
  • long?long?max=-1;??
  • long?long?tem=1;??
  • for(vector<int>::iterator?iter1=ivec.begin();iter1<ivec.end();iter1++)??
  • for(vector<int>::iterator?iter2=ivec.begin();iter2<ivec.end();iter2++){??
  • for(vector<int>::iterator?iter=iter1;iter<=iter2;iter++){??
  • tem=tem*(*iter);??
  • if(tem>max)??
  • max=tem;??
  • }??
  • tem=1;??
  • }??
  • cout<<max<<endl;??
  • ivec.clear();??
  • }??
  • return?0;??
  • }??


  • 7.1.3分?jǐn)?shù)拆分

    輸入正整數(shù)k,找到所有正整數(shù)x>=y,使得1/k=1/x?+?1/y

    樣例輸入:

    2

    樣例輸出:

    1/2=1/6?+?1/3

    1/2=1/4?+?1/4

    程序代碼:

    [cpp]?view plaincopy
  • #include?<iostream>??
  • using?namespace?std;??
  • int?main()??
  • {??
  • int?k;??
  • while(cin>>k){??
  • for(int?y=1;y<=2*k;y++){??
  • float?x=(float)k*y/(y-k);??
  • int?tem=x;??
  • if(x==tem&&x>0)???
  • cout<<"1/"<<k<<"=1/"<<x<<"+1/"<<y<<endl;??
  • }??
  • }??
  • return?0;??
  • }??


  • 7.1.4雙基回文數(shù)

    如果一個(gè)正整數(shù)最小n至少在兩個(gè)不同的進(jìn)制位b1b2下都是回文數(shù)(2<=b1,b2<=10,則稱n是雙基回文數(shù)(注意,回文數(shù)不能包含前導(dǎo)零)。輸入正整數(shù)S<10^9,輸出比S大的最小雙基回文數(shù)。

    樣例輸入:

    1600000

    樣例輸出:

    1632995

    [cpp]?view plaincopy
  • #include?<iostream>??
  • using?namespace?std;??
  • int?isright(int);??
  • int?main()??
  • {??
  • int?n;??
  • cout<<"請(qǐng)輸入一個(gè)正整數(shù),將輸出一個(gè)大于他的最小雙基回文數(shù)\n";??
  • while(cin>>n){??
  • for(int?i=n;;i++){??
  • if(isright(i)){??
  • cout<<i<<endl;??
  • break;??
  • }??
  • }???
  • }??
  • return?0;??
  • }??
  • int?isright(int?a){??
  • int?f=0;//統(tǒng)計(jì)各個(gè)進(jìn)制是回文數(shù)的個(gè)數(shù)???
  • for(int?num=2;num<=10;num++){??
  • char?str[9];??
  • itoa(a,str,num);??
  • int?cont=strlen(str);??
  • for(int?i=0;i<=cont/2;i++){??
  • if(str[i]!=str[cont-i-1])?{??
  • f--;??
  • break;??
  • }??
  • }??
  • f++;??
  • }??
  • if(f>=2)??
  • return?1;??
  • else???
  • return?0;??
  • } ?
  • 總結(jié)

    以上是生活随笔為你收集整理的算法竞赛入门经典读书笔记(二)7.1简单枚举的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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