Jasin Yip

计蒜客【挑战难题】系列讲解(五)矩阵翻转

题目

第5题:矩阵翻转

  晓萌最近在做一个翻转图片的应用,你可能也知道,图片其实是由一个个的点组成的。于是,晓萌想先做一个可以翻转矩阵的程序,来解决他问题的核心部分。
  输入第一行包括由空格分开的整数M、N、T(0<M<200,0<N<200,T=0或1),其中M和N分别表示待处理矩阵的行数与列数,T为0时表示左右翻转,为1时表示上下翻转。
  之后的M行,每行包括由空格分隔的N个整数,依次为输入矩阵的每一行的数据。
  输出包括M行N列,每个数字之间用一个空格分隔,每一行行末均有一个空格,表示的是按照要求翻转后的矩阵。

- 阅读剩余部分 -

在VS2013里使用scanf()报错的解决方法

错误提示信息

error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

解决方案

在代码第一行添加以下代码:

#pragma warning(disable:4996)  

如何查询C语言中各整数类型的范围

准备工作

我们需要引入<limits.h>,其中

SHRT_MAX :short的最大值 
INT_MAX  :int的最大值   
LONG_MAX :long的最大值  

只要将它们用printf()打印出来就好了。

示例

#include <stdio.h>  
#include <limits.h>  
int main()  
{  
  printf("max short int is: %d\n", SHRT_MAX);  
  printf("max int is: %d\n", INT_MAX);  
  printf("max long int is: %d\n", LONG_MAX);  
  return 0;  
}  

以下转自百度百科:

要判断某种特定类型可以容纳的最大值或最小值,一种简便的方法是使用ANSI标准头文件limits.h中的预定义值。该文件包含一些很有用的常量,它们定义了各种类型所能容纳的值,下表列出了这些常量:
常 量 描 述

CHAR_BIT      >      char的二进制位数(bit)
CHAR_MAX      >      char的有符号整数最大值
CHAR_MIN      >      char的有符号整数最小值
MB_LEN_MAX    >      多字节字符的最大字节(byte)数
INT_MAX       >      int的有符号最大值
INT_MIN       >      int的有符号最小值
LONG_MAX      >      long的十进制最大值
LONG_MIN      >      long的十进制最小值
SCHAR_MAX     >      signedchar的十进制整数最大值
SCHAR_MIN     >      signedchar的十进制整数最小值
SHRT_MIN      >      short的十进制最小值
SHRT_MAX      >      short的十进制最大值
UCHAR_MAX     >      unsignedchar的十进制整数最大值
UINT_MAX      >      unsignedint的十进制最大值
ULONG_MAX     >      unsignedlongint的十进制最大值
USHRT_MAX     >      unsignedshortint的十进制最大值

对于整数类型,在使用2的补码运算的机器(你将使用的机器几乎都属此类)上,一个有符号类型可以容纳的数字范围为[- 2^(位数-1) ]到[+ 2^(位数 -1)-1],一个无符号类型可以容纳的数字范围为0到(+ 2^位数 )。
例如,一个16位有符号整数可以容纳的数字范围为-2^15(即-32768)到(+2^15-1)(即+32767)。而16为无符号整数可容纳的最大值为(2^位数-1)或表示为汇编形式0xffff。

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

题目

第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。

- 阅读剩余部分 -