列挙:に基づいて回答しようとしている問題を一つずつ解決するための戦略
の完璧なキューブ:例1
の問題解決のアイデアを:
どのように多くのN 4つの組み合わせの中、各試し再び参照するには
、B、C、Dを列挙するために四重ループ、最も外側の層A、最内層中のD、各層が小から大に列挙され、
範囲の列挙[2、N]
B範囲[2 ,. 1-A]
C範囲[B、-1]
Dレンジ[C、-1]
回答
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int N;
scanf("%d",&N);
for(int a=2;a<=N;a++)
{
for(int b=2;b<a;b++)
{
for(int c=b;c<a;c++)
{
for(int d=c;d<a;d++)
{
if(a*a*a==b*b*b+c*c*c+d*d*d)
{
printf("Cube=%d,Triple=(%d,%d,%d)\n",a,b,c,d);
}
}
}
}
}
return 0;
}
実施例II:生理的サイクル
のアイデアは:第21252日に再度+ 1日Dからの起動、毎日の要件(KP)%23 = = 0満たして決定される &&(KE)%28 = = 0 &&(KI)%33 = = 0
どのように速くテストするには?
テストをジャンプ!
2つの物理的なピーク間の日のための物理的なピークに最初に行くために最初は、それは間違いなく物理的なピークではないので、同時に3つのピーク日とし、その後の物理的および精神的なピーク同時出現のピーク日の日を見つけることができませんそれがピーク物理的および精神的なピークの日が同時に発生されるものではないので、これら二つの間に同じことが、確かに同時に3つのピークの日ではありません
#include<iostream>
#include<cstdio>
using namespace std;
#define N 21252
int main(){
int p,e,i,d,caseNo =0;
while(cin>>p>>e>>i>>d&&p!=-1){
++ caseNo;
int k;
for(k=d+1;(k-p)%23;++k);//找到第一个体力高峰
for(;(k-e)%28;k+=23);//找到体力和情商的双高峰
for(;(k-i)%33;k+=23*28);//找到三个高峰同时出现的日子
cout<<"Case"<<caseNo<<": the next triple peak occurs in "<<k-d<<endl;
}
return 0;
}
例3:言ったコイン