编程实战——编程初学者入门111~120

编程实战——编程初学者入门111~120

  • 111. 有序序列判断
  • 112. 有序序列合并
  • 113. 班级成绩输入输出
  • 114. 最高身高
  • 115. 上三角矩阵判定
  • 116. 矩阵交换
  • 117. 杨辉三角
  • 118. 井字棋
  • 119. 小乐乐改数字
  • 120. 小乐乐与字符串


111. 有序序列判断

题目描述:

输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序。

输入描述:

第一行输入一个整数N(3≤N≤50)。
第二行输入N个整数,用空格分隔N个整数。

输出描述:

输出为一行,如果序列有序输出sorted,否则输出unsorted。

示例:

示例1
输入:
5
1 6 9 22 30
输出:
sorted

c语言版本:

#include 
#include 

int main(void ) {
        int m;
        scanf("%d", &m);
        getchar();

        int* a=(int*)malloc(sizeof(int)*m);
        for(int i=0;i<m;++i) {
                scanf("%d",a+i);
        }

        int flag1=0;
        int flag2=0;

        for(int i=1;i<m;++i){
                if(a[i-1]<a[i]){
                        continue;
                }
                else if(!flag1 && a[i-1]==a[i]) continue;
                else {
                        flag1 = 1;
                        break;
                }
        }
        for(int i=1;i<m;++i){
                if(a[i-1]>a[i]){
                        continue;
                }
                else if(!flag2 && a[i-1]==a[i]) continue;
                else {
                        flag2 = 1;
                        break;
                }
        }

        if(flag1 && flag2)printf("unsorted\n");
        else printf("sorted\n");

        free(a);
        return 0;
}

c++版本:

java版本:

python版本:


112. 有序序列合并

题目描述:

输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。

输入描述:

输入包含三行,

第一行包含两个正整数n, m(1 ≤ n,m ≤ 100),用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。

第二行包含n个整数(范围1~5000),用空格分隔。

第三行包含m个整数(范围1~5000),用空格分隔。

输出描述:

输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。

示例:

示例1
输入:
5 6
1 3 7 9 22
2 8 10 17 33 44
输出:
1 2 3 7 8 9 10 17 22 33 44

c语言版本:

#include 
#include 

int main(void ) {
        int m,n;
        scanf("%d %d", &m,&n);
        getchar();

        int* a=(int*)malloc(sizeof(int)*m);
        int* b=(int*)malloc(sizeof(int)*n);
        for(int i=0;i<m;++i) {
                scanf("%d",a+i);
        }
        getchar();
        for(int i=0;i<n;++i) {
                scanf("%d",b+i);
        }
        getchar();

        int i=0;
        int j=0;
        while(i<m&&j<n){
                if(a[i]<b[j]){
                        printf("%d ", a[i]);
                        i++;
                }else{
                        printf("%d ",b[j] );
                        j++;
                }
        }
        while(i<m)printf("%d ",a[i++] );
        while(j<n)printf("%d ",b[j++] );
        printf("\n");

        free(b);
        free(a);
        return 0;
}

c++版本:

java版本:

python版本:


113. 班级成绩输入输出

题目描述:

输入一个班级5个学生各5科成绩,输出5个学生各5科成绩及总分。

输入描述:

五行,每行输入一个学生各5科成绩(浮点数表示,范围0.0~100.0),用空格分隔。

输出描述:

五行,按照输入顺序每行输出一个学生的5科成绩及总分(小数点保留1位),用空格分隔。

示例:

示例1
输入:
98.5 96.0 100 99 88
60.5 77 88.5 99 60
80 80.5 89 91 92
93 94 95.5 96 97.5
100 98 88.5 88 78.5
输出:
98.5 96.0 100.0 99.0 88.0 481.5
60.5 77.0 88.5 99.0 60.0 385.0
80.0 80.5 89.0 91.0 92.0 432.5
93.0 94.0 95.5 96.0 97.5 476.0
100.0 98.0 88.5 88.0 78.5 453.0

c语言版本:

#include 
#include 

int main(void ) {
        float num;
        float sum=0;
        for(int j=0;j<5;++j){
                for(int i=0;i<5;++i){
                        scanf("%f", &num);
                        sum+=num;
                        printf("%.1f ", num);
                }
                getchar();
                printf("%.1f\n",sum);
                sum=0;
        }
        return 0;
}

c++版本:

java版本:

python版本:


114. 最高身高

题目描述:

KiKi想从n行m列的方阵队列中找到身高最高的人的位置,请你帮助他完成这个任务。

输入描述:

第一行包含两个整数n和m,表示这个方阵队列包含n行m列。从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示方阵中的所有人的身高(保证输入身高都不相同)。(1≤x≤n≤10,1≤y≤m≤10)

输出描述:

一行,输出两个整数,用空格分隔,表示方阵中身高最高的人所在的行号和列号。

示例:

示例1
输入:
2 2
175 180
176 185
输出:
2 2

c语言版本:

#include 

int main(void ) {
        int m,n;
        scanf("%d %d", &m,&n);
        getchar();

        int x=0,y=0;
        int max = 0;
        int num;
        for(int i=0;i<m;i++){
                for(int j=0;j<n;++j){
                        scanf("%d",&num);
                        if(max<=num) {
                                max = num;
                                x=i;
                                y=j;
                        }
                }
        }
        printf("%d %d\n",x+1,y+1 );
        return 0;
}

c++版本:

java版本:

python版本:


115. 上三角矩阵判定

题目描述:

KiKi想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。

输入描述:

第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (1≤n≤10)

从2到n+1行,每行输入n个整数(范围-231~231-1),用空格分隔,共输入n*n个数。

输出描述:

一行,如果输入方阵是上三角矩阵输出"YES"并换行,否则输出"NO"并换行

示例:

示例1
输入:
3
1 2 3
0 4 5
0 0 6
输出:
YES

c语言版本:

#include 

int main(void ) {
        int m;
        scanf("%d", &m);
        getchar();

        int flag=0;
        int num;
        for(int i=0;i<m;i++){
                for(int j=0;j<m;++j){
                        scanf("%d", &num);
                        if( i>j && num!=0 ){
                                flag =1;
                                break;
                        }
                }
        }
        if(!flag) printf("YES\n");
        else    printf("NO\n");
        return 0;
}

c++版本:

java版本:

python版本:


116. 矩阵交换

题目描述:

KiKi有一个矩阵,他想知道经过k次行变换或列变换后得到的矩阵。请编程帮他解答。

输入描述:

第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)

从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。
接下来一行输入k,表示要执行k次操作(1≤k≤5)。接下来有k行,每行包括一个字符t和两个数a和b,中间用空格格分隔,t代表需要执行的操作,当t为字符'r'时代表进行行变换,当t为字符'c'时代表进行列变换,a和b为需要互换的行或列(1≤a≤b≤n≤10,1≤a≤b≤m≤10)。

输出描述:

输出n行m列,为矩阵交换后的结果。每个数后面有一个空格。

示例:

示例1
输入:
2 2
1 2
3 4
1
r 1 2
输出:
3 4 
1 2 

c语言版本:

#include 
#include 

void rowChange(int**a,int n,int r,int l){
        int tmp;
        for(int i=0;i<n;++i){
                tmp = a[r-1][i];
                a[r-1][i] = a[l-1][i];
                a[l-1][i] = tmp;
        }
}

void clChange(int**a,int m,int r,int l){
        int tmp;
        for(int i=0;i<m;++i){
                tmp = a[i][r-1];
                a[i][r-1] = a[i][l-1];
                a[i][l-1]= tmp;
        }
}

int main(void ) {
        int m,n;
        scanf("%d%d", &m,&n);
        getchar();

        int** a=(int**)malloc(sizeof(int*)*m);
        for(int i=0;i<m;++i)a[i]=(int*)malloc(sizeof(int)*n);
        for(int i=0;i<m;++i){
                for(int j=0;j<n;j++)scanf("%d",a[i]+j );
                getchar();
        }

        int k;
        scanf("%d", &k);
        getchar();

        char* c=(char*)malloc(sizeof(char)*k);
        int* r=(int*)malloc(sizeof(int)*k);
        int* l=(int*)malloc(sizeof(int)*k);
        for(int i=0;i<k;++i){
                scanf("%c%d%d",c+i,r+i,l+i);
                getchar();
        }

        for(int i=0;i<k;++i){
                if(c[i]=='r')rowChange(a,n,r[i],l[i]);
                else if(c[i]=='c') clChange(a,m,r[i],l[i]);
                else continue;
        }

        for(int i=0;i<m;++i){
                for(int j=0;j<n;++j)printf("%d ",a[i][j]);
                printf("\n");
        }

        for(int i=0;i<m;++i)free(a[i]);
        free(a);
        free(c);
        free(r);
        free(l);
        return 0;
}

c++版本:

java版本:

python版本:


117. 杨辉三角

题目描述:

KiKi知道什么叫杨辉三角之后对杨辉三角产生了浓厚的兴趣,他想知道杨辉三角的前n行,请编程帮他解答。杨辉三角,本质上是二项式(a+b)的n次方展开后各项的系数排成的三角形。其性质包括:每行的端点数为1, 一个数也为1;每个数等于它左上方和上方的两数之和。

输入描述:

第一行包含一个整数数n。 (1≤n≤30)

输出描述:

包含n行,为杨辉三角的前n行,每个数输出域宽为5。

示例:

示例1
输入:6
输出:
 1
    1    1
    1    2    1
    1    3    3    1
    1    4    6    4    1
    1    5   10   10    5    1

c语言版本:

#include 

long factor(int m){
        if(m == 0)return 1;
        long s=1;
        for(int i=m;i>=1;--i)s*=i;
        return s;
}

long     comNum(int m, int n){
        if(n==0||m==0) return 1;
        return factor(m)/factor(n)/factor(m-n);
}

int main(void){
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;++i){
                for(int j=0;j<i-1;++j)printf("%5ld",comNum(i-1,j));
                printf("%5d\n",1);
        }
        return 0;
}

c++版本:

java版本:

python版本:


118. 井字棋

题目描述:

KiKi和BoBo玩 “井”字棋。也就是在九宫格中,只要任意行、列,或者任意对角线上面出现三个连续相同的棋子,就能获胜。请根据棋盘状态,判断当前输赢。

输入描述:

三行三列的字符元素,代表棋盘状态,字符元素用空格分开,代表当前棋盘,其中元素为K代表KiKi玩家的棋子,为O表示没有棋子,为B代表BoBo玩家的棋子。

输出描述:

如果KiKi获胜,输出“KiKi wins!”;
如果BoBo获胜,输出“BoBo wins!”;
如果没有获胜,输出“No winner!”。

示例:

示例1
输入:
K O B
O K B
B O K
输出:
KiKi wins!

c语言版本:

#include 

int main(void){
        char num[3][3];
        char c='1';

        for(int i=0;i<3;++i){
                 for(int j=0;j<3;++j){
                        scanf("%c",&c );
                        getchar();
                        if(c =='K') num[i][j]=1;
                        if(c=='O')num[i][j]=0;
                        if(c=='B')num[i][j]=-1;
                }
        }

        int flagK = 0;
        int flagB = 0;

        if(num[0][0]+num[1][1]+num[2][2]==3) flagK=1;
        if(num[0][2]+num[1][1]+num[2][0]==3) flagK=1;
        if(num[0][0]+num[1][1]+num[2][2]==-3) flagB=1;
        if(num[0][2]+num[1][1]+num[2][0]==-3) flagB=1;

        int sum=0;
        if(!flagB && !flagK){
                for(int i=0;!flagK&&!flagB&&i<3;++i){
                        for(int j=0;j<3;++j)sum+=num[i][j];
                        if(sum == 3){
                                 flagK=1;
                                 break;
                         }
                        if(sum ==-3){
                                flagB=1;
                                break;
                        }
                        sum=0;
                }
        }
        if(!flagB && !flagK){
                for(int i=0;!flagK&&!flagB&&i<3;++i){
                        for(int j=0;j<3;++j)sum+=num[j][i];
                        if(sum == 3){
                                 flagK=1;
                                 break;
                         }
                        if(sum ==-3){
                                flagB=1;
                                break;
                        }
                        sum=0;
                }
        }
        if(flagK && !flagB)printf("KiKi wins!\n");
        else if(!flagK && flagB )printf("BoBo wins!\n");
        else printf("No winner!\n");
        return 0;
}

c++版本:

java版本:

python版本:


119. 小乐乐改数字

题目描述:

小乐乐喜欢数字,尤其喜欢0和1。他现在得到了一个数,想把每位的数变成0或1。如果某一位是奇数,就把它变成1,如果是偶数,那么就把它变成0。请你回答他最后得到的数是多少。

输入描述:

输入包含一个整数n (0 ≤ n ≤ 109)

输出描述:

输出一个整数,即小乐乐修改后得到的数字。

示例:

示例1
输入:222222
输出:0

示例1
输入:123
输出:101

c语言版本:

#include 

int main(void){
        int n;
        scanf("%d",&n );
        int sum=0;
        int m;
        int num=1;
        while(n){
                m = n%10;
                if(m%2) sum+=num;
                n/=10;
                num*=10;
        }
        printf("%d\n",sum);
        return 0;
}

c++版本:

java版本:

python版本:


120. 小乐乐与字符串

题目描述:

在庆祝祖国母亲70华诞之际,老师给小乐乐出了一个问题。大家都知道China的英文缩写是CHN,那么给你一个字符串s,你需要做的是统计s中子串“CHN”的个数。
子串的定义:存在任意下标a < b < c,那么“s[a]s[b]s[c]”就构成s的一个子串。如“ABC”的子串有“A”、“B”、“C”、“AB”、“AC”、“BC”、“ABC”。

输入描述:

输入只包含大写字母的字符串s。(1 ≤ length ≤ 8000)

输出描述:

输出一个整数,为字符串s中字串“CHN”的数量。

示例:

示例1
输入:CCHNCHN
输出:7

c语言版本:

#include 

int main(void){
        char c[8000]={0};
        scanf("%s", c);
        int i=0;
        long j=0;
        long k=0;
        long sum=0;
        while(c[i]){
                if(c[i]=='C')j++;
                if(c[i]=='H')k+=j;
                if(c[i]=='N')sum+=k;
                ++i;
        }
        printf("%ld\n",sum);
        return 0;
}

c++版本:

java版本:

python版本:


本题目全部来自牛客网,如果侵权,请留言删除

你可能感兴趣的:(编程实战)