蓝杯十六

作者: 逍遥_9353 | 来源:发表于2017-12-29 20:19 被阅读20次

    一、/*回形取数

    问题描述  回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。输入格式  输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。输出格式  输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。

    样例输入

    3 3

    1 2 3

    4 5 6

    7 8 9

    样例输出

    1 4 7 8 9 6 3 2 5

    样例输入

    3 2

    1 2

    3 4

    5 6

    样例输出

    1 3 5 6 4 2*/

    #include<stdio.h>

    int main() {   

    int n,m,count;   

    scanf("%d%d",&n,&m); 

    count=n*m;   

    int a[n][m],i,j;   

    for(i=0; i<n; i++) {       

    for(j=0; j<m; j++) {         

    scanf("%d",&a[i][j]);       

              }   

    }    //以上是数的输入

      int t=0;//t用于记录圈数 

    i=0;//数的横坐标   

    j=0;//数的纵坐标   

    while(count) {    //省略if(i==t&&j==t&&count),判断坐标是否在左上角的节点,因为条件必然成立       

    while(i<n-t&&count) {//从左上角向下走           

    if(i==0&&j==0) {//第一个数的输出格式             

    printf("%d",a[0][0]);             

    i++;           

    }

    else             

      printf(" %d",a[i++][j]);           

    count--;        }       

    i--;     

    j++;       

    //省略if(i==n-1-t&&j==t),左下角的节点的判断       

    while(j<m-t&&count) {//向右走           

    printf(" %d",a[i][j++]);         

    count--;        }     

    j--;     

    i--;        //省略if(i==n-1-t&&j==m-1-t&&count),右下角节点的判断     

    while(i>=t&&count) {//向上走           

    printf(" %d",a[i--][j]);         

    count--;        }     

      i++;       

    j--;        //省略if(i==t&&j==m-1-t),右上角节点的判断     

    while(j>t&&count) {//向左走           

    printf(" %d",a[i][j--]);         

    count--;        }       

    j++;       

    i++;       

    t++;//圈数加一    }   

    return 0;

    }

    二、/*递归求二项式系数值

    问题描述

    样例输入

    一个满足题目要求的输入范例。

    3 10

    样例输出

    与上面的样例输入对应的输出。

    数据规模和约定

      输入数据中每一个数的范围。

      例:结果在int表示时不会溢出。

    */

    #include <stdio.h> 

    int ditui(int k,int n){ 

        if(k>n/2) k=n-k; 

        if(k==0||n==1) return 1; 

        else

    return ditui(k,n-1)+ditui(k-1,n-1); 

    int main() { 

        int k,n; 

        scanf("%d%d",&k,&n); 

        printf("%d",ditui(k,n)); 

        return 0; 

    三、/*十六进制转十进制

    问题描述

      从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。

      注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

    样例输入

    FFFF

    样例输出

    65535

    */

    #include<stdio.h>

    int main()

    {

        char in[9];

        int i;

        long long int out;

        gets(in);

        out=0;

        for(i=0;in[i]!='\0';i++)

        {

            if(in[i]>='0'&&in[i]<='9')

            out=out*16+(in[i]-'0');

            else

            out=out*16+(in[i]-'A'+10);

        }

        printf("%I64d\n",out);

        return 0;

    }

    蓝杯十六 蓝杯十六 蓝杯十六 蓝杯十六 蓝杯十六 蓝杯十六

    相关文章

      网友评论

        本文标题:蓝杯十六

        本文链接:https://www.haomeiwen.com/subject/zsewgxtx.html