SCAUoj教材习题第六章

还是有不少经典题目的

文章目录

  • 第六章
    • [18052 插入数据](#18052 插入数据)
    • [18053 大于平均分](#18053 大于平均分)
    • [18054 输出不同的数](#18054 输出不同的数)
    • [18055 主对角线上的元素之和](#18055 主对角线上的元素之和)
    • [1051 找矩阵中的鞍点](#1051 找矩阵中的鞍点)
    • [8056 字母统计](#8056 字母统计)
    • [1145 回文串](#1145 回文串)
    • [18057 ASCII码值之和的差](#18057 ASCII码值之和的差)

第六章

18052 插入数据

Description

已经有一个按升序排列的数组,编写程序输入一个整数x,把x插入到数组中,使数组仍然保持升序。

数组如下:

2 3 5 7 11 13 17 23 29 31 34 71 79 97 103

c 复制代码
#include <stdio.h>
int a[16]={2, 3, 5, 7, 11, 13, 17, 23, 29, 31, 34, 71, 79, 97, 103};
void display()
{
    int i;
    for(i=0; i<16; i++) printf("%d ", a[i]);
}
int main()
{
_______________________
    display();
    return 0;
}

输入格式

输入一个整数x

输出格式

输出更新后的数组元素

输入样例

5
代码如下:

c 复制代码
#include <stdio.h>
int a[16]={2, 3, 5, 7, 11, 13, 17, 23, 29, 31, 34, 71, 79, 97, 103};
void display()
{
    int i;
    for(i=0; i<16; i++)
        printf("%d ", a[i]);
}
int main()
{
    int n,i;
    scanf("%d", &n);
    for(i=14; i>=0; i--)//划重点
    {
       if(a[i]>n)
          a[i+1]=a[i];//把左边的挪到右边,到n停止
       else break;
    }
    a[i+1]=n;
    display();
    return 0;
}

18053 大于平均分

Description

输入10个整数,计算它们的平均值,并统计有多少个数比平均值大。

输入格式

10个整数

输出格式

比平均值在的数的个数

输入样例

0 1 2 3 4 5 6 7 8 9

输出样例

5

代码如下(示例):

c 复制代码
#include<stdio.h>
int main()
{
    int arr[10] = {0};
    int i = 0,sum = 0,count = 0;
    double average = 0.0;
    for(i=0;i<10;i++)
    {
        scanf("%d",&arr[i]);
    }
    for(i=0;i<10;i++)
    {
        sum = sum + arr[i];
    }
    average = sum/10.0;//用浮点数哦
    for(i=0;i<10;i++)
    {
        if((double)arr[i]>average)
            count++;
    }
    printf("%d\n",count);
    return 0;
}

18054 输出不同的数

Description

输入10个整数,输出其中不同的数,即如果一个数出现了多次,只输出一次。

输入格式

输入10个整数

输出格式

依次输出不同的数字(一行一个,从上到下依次输出先出现的数)

输入样例

1 2 1 3 3 2 4 5 5 9

输出样例

1

2

3

4

5

9
代码如下:

c 复制代码
#include<stdio.h>
{
    int arr[10] = {0};
    int i = 0,j = 0;
    for(i = 0; i<10; i++)
    {
        scanf("%d",&arr[i]);
    }
    for(i = 0; i<10; i++)//双重循环肯定可以解决这个问题,但是效率比较低
    {
        for(j = 0; j<i; j++)
        {
            if(arr[i] == arr[j])
                break;
        }
        if(j == i)
        {
            printf("%d\n",arr[i]);
        }
    }
    return 0;
}

18055 主对角线上的元素之和

Description

输入一个3行4列的整数矩阵,计算并输出主对角线上的元素之和

输入格式

3行4列整数矩阵

输出格式

主对角线上的元素之和

输入样例

1 2 3 4

5 6 7 8

9 10 11 12

输出样例

18

提示

1,6和11
代码如下:

c 复制代码
#include<stdio.h>
int main()
{
    int i = 0,j = 0,arr[3][4];
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    printf("%d\n",arr[0][0]+arr[1][1]+arr[2][2]);
    return 0;
}

1051 找矩阵中的鞍点

Description

由键盘输入一个3*4(3行4列)的数字矩阵,其中任意两个数字均不相同。要求输出该数字矩阵中的鞍点(即在矩阵行中最大,列中最小的数)。

若没有鞍点,输出"NO"字样。

输入样例

87 90 110 98

70 97 210 65

99 45 120 30

输出样例

110
代码如下:

c 复制代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i,j,a[3][4],flag=0,col,r;
    for(i=0;i<3;i++)
        for(j=0;j<4;j++)
            scanf("%d",&a[i][j]);

    for(i=0;i<3;i++)
    {
        col=0;
        for(j=1;j<4;j++)
            if(a[i][j]>a[i][col])
                col=j;//关键。找到行的最大值对应的数字
        for(j=0;j<4;j++)
        {
            if(a[i][j]==a[i][col])//注意现在的j
            {
                for(r=0;r<3;r++)
                    if(a[r][j]<a[i][j])//那一列的数字进行比较
                        break;//以防r=3了还继续r++,并且接着下面的if判断
                if(r==3)
                {
                    printf("%d\n", a[i][j]);
                    flag=1;
                }
            }
        }
    }
    if(!flag)
        printf("NO\n");
    return 0;
}

8056 字母统计

Description

输入三行字符串(每行以换行回车为结束符),每行不超过80个字符。统计并输出其有多少个大写字母。

输入格式

三行字符串

输出格式

大写字母个数

输入样例

A-1 123

ABC abc

G

输出样例

5

代码如下:

c 复制代码
#include<stdio.h>
int main()
{
    int i = 0,count = 0;
    char ch;//char ch = getchar();这样写就是错的,因为这条语句在循环之外输入了一个字符
    for(i=0;i<3;i++)
    {
        while((ch=getchar())!='\n')
        {
            if(ch>='A'&&ch<='Z')
            {
                count++;
            }
        }
    }
    printf("%d\n",count);
    return 0;
}

1145 回文串

Description

读入一行字符串(不多于80个字符,以回车结束),判断该字符串是否为回文串(即从左向右拼写与从右向左拼写是一样的),是则输出Y,不是则输出N。

输入格式

一行字符串

输出格式

是则输出Y,不是则输出N

输入样例

abba

输出样例

Y

提示

input:

abcba

output:

Y

input:

abc

output:

N
代码如下:

c 复制代码
#include<stdio.h>
#include<string.h>
int main()
{
  int i, j;
  char buf[80];
  scanf("%s",buf);
  for(i=0, j=strlen(buf)-1;i<j; i++, j--)
    {
       if(buf[i]!=buf[j])
          break;
    }
  if(i>=j)
      printf("Y");
  else
      printf("N");
}

18057 ASCII码值之和的差

Description

输入两个字符串s1和s2(每个串占一行,以换行回车符结束),计算两个字符串的所有字符的ASCII码值之和的差。

输入格式

两行字符,第行字符不超过80个字符

输出格式

ASCII码值之和的差

输入样例

234

123

输出样例

3
代码如下:

c 复制代码
#include<stdio.h>
#include<math.h>
int main()
{
    char arr1[80],arr2[80];
    int i = 0,u = 0,sum1 = 0,sum2 = 0,ret = 0;
    gets(arr1);
    gets(arr2);
    for(i=0;arr1[i]!='\0';i++)
    {
        sum1 = sum1 + arr1[i];
    }
    for(u=0;arr2[u]!='\0';u++)
    {
        sum2 = sum2 + arr2[u];
    }
    ret = sum1 - sum2;
    printf("%d\n",ret);
    return 0;
}

相关推荐
记录成长java23 分钟前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
前端青山23 分钟前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
hikktn26 分钟前
如何在 Rust 中实现内存安全:与 C/C++ 的对比分析
c语言·安全·rust
睡觉谁叫~~~27 分钟前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust
音徽编程28 分钟前
Rust异步运行时框架tokio保姆级教程
开发语言·网络·rust
观音山保我别报错29 分钟前
C语言扫雷小游戏
c语言·开发语言·算法
小屁孩大帅-杨一凡1 小时前
java后端请求想接收多个对象入参的数据
java·开发语言
m0_656974741 小时前
C#中的集合类及其使用
开发语言·c#
java1234_小锋1 小时前
使用 RabbitMQ 有什么好处?
java·开发语言
wjs20242 小时前
R 数据框
开发语言