算法求解

算法求解

编程求解: 运动员打靶,10发子弹命中90环(每分成绩为0到10环不等)
                 求可能情况的总数

解法一:
 #include <stdio.h>
#include <stdlib.h>

int f(int n, int m)
{
 int fn=0,i;
 if(m<0||m>10*n) return 0;
 if(n==1) return 1;
 for(i=0;i<=10;i++)
 fn+=f(n-1,m-i);
 return fn;
}


int main()
{
 int n,m;
 printf("Please enter n and m:");
 scanf("%d%d",&n,&m);
 printf("\n%d发打中%d环有%d种可能.\n",n,m,f(n,m));

 system("PAUSE");
 return 0;


解法二:

 #include"stdio.h"

int main(){

int num =1,i;
for(i=1;i<=10;i++)
num = num *(9+i)/i;
printf("%d",num);
}

个人观点:
  计算机是一门和数学相关的学科,随着这门学科的发展,这种"本质"似乎被弱化了.解法1是很普通的方法,一般人都是这种思路.而解法二则是从数学角度考虑.简洁,快速.
上次去神码笔试,碰到一题
   :给定一个数,如7899,把各位数值相加7+8+9+9=33,3+3=6,用这种方法计算机下去,求最后得到的个位数

我给出的解法:
#include "stdio.h"

int main(){
   int i;
   scanf("%d",&i);
   printf("%d",i%9==0?9:i%9);
   return 0
}//~end 
 

你可能感兴趣的:(算法求解)