生活随笔
收集整理的這篇文章主要介紹了
算法竞赛入门经典读书笔记(二)7.1简单枚举
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
7.1.1簡單枚舉
除法
輸入正整數(shù)n,按從小到大的順序輸出所有形如abcde/fghij=n的表達式,其中a~j恰好為數(shù)字0~9的一個排列,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){?? 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個元素組成的序列s,你需要找出一個乘積最大的連續(xù)子序列。如果這個最大的成績不是正數(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分數(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ù)
如果一個正整數(shù)最小n至少在兩個不同的進制位b1和b2下都是回文數(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<<"請輸入一個正整數(shù),將輸出一個大于他的最小雙基回文數(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;?? 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简单枚举的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。