SCAUoj教材习题第六章

还是有不少经典题目的

文章目录

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


第六章

18052 插入数据

Description
已经有一个按升序排列的数组,编写程序输入一个整数x,把x插入到数组中,使数组仍然保持升序。
数组如下:
2 3 5 7 11 13 17 23 29 31 34 71 79 97 103

#include 
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
代码如下:

#include 
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

代码如下(示例):

#include
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
代码如下:

#include
{
    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
代码如下:

#include
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
代码如下:

#include 
#include 
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

代码如下:

#include
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
代码如下:

#include
#include
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
代码如下:

#include
#include
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;
}

你可能感兴趣的:(SCAU_oj_c语言,算法,c语言,开发语言)