Jasin Yip

JasinYip 发布的文章

计蒜客【挑战难题】系列讲解(四)简单斐波那契

题目

第4题:简单斐波那契

  斐波那契数列是一种非常有意思的数列,由 0 和 1 开始,之后的斐波那契系数就由之前的两数相加。
  用数学公式定义斐波那契数列则可以看成如下形式:
F0=0
F1=1
Fn=Fn-1+Fn-2
  我们约定Fn表示斐波那契数列的第n项,你能知道斐波那契数量中的任何一项吗?
  输入包括一行,包括一个数字N(0≤N≤50)。
  输出包括一行,包括一个数字,为斐波那契数列的第N项的值。

样例输入

7

样例输出

13

C 实现

#include <stdio.h>  
  
int fib(int N){  
    int i;  
    int arr[50] = {0};  //由于题目说明N的取值范围是(0≤N≤50),故定义数组为50  
      
    arr[1] = 1;   
    for (i = 2; i <= N; i++)  
        arr[i] = arr[i-1] + arr[i-2];  
  
    return arr[N];  //返回结果  
}  
  
int main(){  
    int N = 0;  
    scanf("%d", &N);  
    printf("%d", fib(N));   //输出结果直接调用函数计算  
      
    return 0;  
}  

它如何工作

  这题实际上只是考验对循环的运用,这里我使用了函数去计算结果。

  首先,根据定义,先把arr[

小贴士

  函数的概念其实很简单,我把它比喻为一台计算器,给计算器两个数字,并且加上一个运算符,它就给我返回一个结果。
  这就是函数的概念,调用函数时,只需要明白该函数有什么用。
  像题中的函数,作用就是:我给你N,你返回斐波那契数列的第N项的值给我。
  详细对于函数的学习,请移步至计蒜客C语言基础第35课:什么是函数

  实际上,斐波那契数列是经典的递归题,但我觉得很多时候不一定只靠递归才能解决问题,循环有时也挺方便的。

计蒜客【挑战难题】系列讲解(三)判断质数

题目

第3题:判断质数

  对于大于1的数,如果除了1和它本身,它不能再被其它正整数整除,那么我们说它是一个质数。晓萌想判断一个数是不是质数,希望找你写个程序,帮助她进行判断。
  输入包括一行,为一个整数N(1 < N ≤1000),正是晓萌给出你让你判断的数字。
  输出包括一行,如果晓萌给出的整数N为质数,那么输出YES;如果N不是质数,那么输出NO。

- 阅读剩余部分 -

计蒜客【挑战难题】系列讲解(二)整除问题

题目

第2题:整除问题

  判断一个数是否能被另一个整数整除是一个挺简单的问题,一般一个模运算就可以搞定了,懒惰的晓萌还是不想自己做,于是找到你帮他写代码,你就帮帮他吧。
  输入包括两个由空格分开的整数M和N(1≤M,N≤500)。
  输出包括一行,如果M可以被N整除就输出YES,否则输出NO(结果大小写敏感)。

样例输入

21 7

样例输出

YES

C 实现

#include <stdio.h>  
  
int main(){  
    int M, N;  
    scanf("%d%d", &M, &N);  
    if ((M % N) == 0)  
        printf("YES");   
    else  
        printf("NO");  
      
    return 0;  
}  

它如何工作

  本题目主要考查对选择结构(if语句)的使用,以及第五则运算(%,取余)。
  输入M、N两个数后,通过if语句,判断M除以N的余数是否为0(即是否能整除),
    如果是,则输出YES
    如果否,则输出NO

小贴士

  有些同学把题目中的“(1≤M,N≤500)”写到代码中,我为他们这样的想法感到很奇怪。
  题目给出的只不过是M、N的取值范围,为什么会写到if语句的判断式中呢?
  给出取值范围,一般是用来简化,或者限制某些数据的数量,比如数组的个数或者字符的长度等等。
  目的是减少无谓内容的干扰,把重点放在算法上。

计蒜客【挑战难题】系列讲解(一)A+B+C问题

题目

第1题:A+B+C 问题

  这是一个非常简单的题目,意在考察你编程的基础能力。千万别想难了哦。输入为一行,包括了用空格分隔的三个数据A、B、C(数据范围均在-40~40之间)。输出为一行,为“A+B+C”的计算结果。

样例输入

22 1 3

样例输出

26

C实现

#include <stdio.h>  
  
int main(){  
    int a, b, c;  
    scanf("%d%d%d", &a, &b, &c);  
    printf("%d", a+b+c);      
    return 0;  
}  

它如何工作

  此题较为简单,不作解释。