Fork me on GitHub

百练_1664 放苹果

描述

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

输入

第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。

输出

对输入的每组数据M和N,用一行输出相应的K。

样例输入

1
7 3

样例输出

8

代码如下:

#include <cstdio>
int gcd(int q,int w);
int gcd(int q,int w){
   return w == 0 ? q : gcd(w, q%w);
}
int main()
{
    int n,a[650],ans=0,g;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
    }
    for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                    if((a[i]>a[j]&&a[i]%a[j]!=0)){
                          g=gcd(a[i],a[j]);
                          ans++;
                        if(g!=1&&a[i]%g==0&&a[j]%g==0){
                           ans--;
                        }
                    }
                }
    }
    printf("%d\n",ans);

    return 0;
}

 

思路解析:

             经典递归。

posted @ 2016-08-22 16:52  Jinkelababy  阅读(252)  评论(0编辑  收藏  举报