算法——窮舉

【題目一】把一元鈔票換成一分、二分、五分硬幣(每種至少一枚),有哪些種換法?


#include <stdio.h>
void main()
{
 int i,j,k,num=0;
 for(i=1;i<=19;i++)
  for(j=1;j<=47;j++)
  {
   k=100-5*i-2*j;
   if(k>0)
    num++;
  }
   
 printf("%d\n",num);
  
}

【題目二】將1,2...99個數分成三組,分別組成三個三位數,且使這三個三位數構成1:2:3的比例,試求出所有滿足條件的三個三位數.

#include <stdio.h>
void main()
{
 int i,j,k,l,m,n=1,a[10]={0},x;
 for(i=1;i<=3;i++)
  for(j=1;j<=9;j++)
  {
   if(j!=i)
    for(k=1;k<=9;k++)
    {  
     if(k!=i&&k!=j)
        {
      x=100*i+10*j+k;
      for(l=1;l<=3;l++)
      {
       a[(l*x)%10]++;
       a[(l*x)/10%10]++;
       a[(l*x)/100]++;
      }
      for(m=1;m<=9;m++)
      {
       if(a[m]!=1)
        n=0;
      }
      if(n)
       printf("%5d%5d%5d\n",x,2*x,3*x);
      for(n=1;n<=9;n++)
       a[n]=0;
      n=1;
      
     }
    }
  }
}

【題目三】:窮舉法中窮舉方案的選擇

陳婷有一個E-MAIL郵箱的密碼是一個5位數。但因爲有一段比較長的日子沒有打開這個郵箱了,陳婷把這個密碼給忘了。不過陳婷自己是81日出生,而她媽媽的生日則是91日,她特別喜歡把同時是8l9l的倍數用作密碼。陳婷還記得這個密碼的中間一位(百位數)l。你能設計一個程序幫她找回這個密碼嗎?

#include <stdio.h>
#define N 81
#define M 91
int a(int x,int y)
{
 int temp;
 if(y>x)
 {
  temp=x;
  x=y;
  y=temp;
 }
 temp=x%y;
 if(temp==0)
  return y;
 else
  a(y,temp);
}
void main()
{
 int i,x,y;
 x=N*M/a(N,M);
 y=x;
 for(i=1;y<100000;i++)
 {
  y=x*i;
  if(y>=10000)
  {
   if(y/100%10==1&&y<=99999)
    printf("%6d\n",y);
  }
 }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章