【沈阳航空航天大学】 <数组-计分任务>

必看注意事项!!!

数组代码基本上都使用了变长数组(VLA),VS2022,VS2019,VS2010等编译器中并不支持,如需调试请自行寻找gcc编译器或者clang编译器!!!

但是CG平台是支持变长数组的

1. 院士名单排序

【问题描述】2019年11月22日,中国科学院、中国工程院公布了2019年两院院士增选结果。共选举产生64名科学院院士和75名工程院院士、20名外籍科学院院士和29名外籍工程院院士。其中来自航空航天领域的新科学院院士有2名,分别是李东旭(女)和祝学军(女)。新工程院院士共8人,分别是曹喜滨、向锦武、肖龙旭、朱广生、魏毅寅、宫声凯、曹建国、李贤玉(女)。请输入某两位院士的英文名称,按照字典次序进行排列并输出排列结果。
【要求】不允许使用字符串库函数,否则不得分。

【输入形式】输入两个院士英文名称,中间用空格隔开,英文名称中不包含空格
【输出形式】排序后的两个院士英文名称,中间用空格隔开

【样例输入】lidongxu zhuxuejun
【样例输出】lidongxu zhuxuejun

【样例输入】caoxibin caojianguo
【样例输出】caojianguo caoxibin

#include <stdio.h>

int main()
{
    char name1[20], name2[20];
    scanf("%s %s", name1, name2);
    int i = 0;
    while (name1[i] != '\0' && name2[i] != '\0')
    {
        if (name1[i] < name2[i])
        {
            printf("%s %s", name1, name2);
            break;
        }
        else if (name1[i] > name2[i])
        {
            printf("%s %s", name2, name1);
            break;
        }
        i++;
    }
    return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

2. 计算两个二维数组的差

【问题描述】输入两个同为mn的二维整数数组A和B(m,n<10),计算A-B的差并输出。
【输入形式】m|n|第1个m
n二维数组A|第2个m*n二维数组B

【输出形式】m*n二维数组C
【样例输入】
2
3
1 2 3
4 5 6

-1 -2 -3
-4 -5 -6
【样例输出】
2 4 6
8 10 12

#include <stdio.h>

int main()
{
    int m, n;
    scanf("%d", &m);
    scanf("%d", &n);
    int A[m][n], B[m][n], C[m][n];
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            scanf("%d", &A[i][j]);
        }
    }
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            scanf("%d", &B[i][j]);
        }
    }
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            C[i][j] = A[i][j] - B[i][j];
        }
    }
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf("%d ", C[i][j]);
        }
        printf("\n");
    }
    return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

3. 将数组按照每5个一组分组,求其平均值

【问题描述】输入一个整数的数组,按从前到后次序进行分组,每组包含5个数,剩余不足5个数自成一组。分别对每组数计算其平均值。

【输入形式】首先输入数组个数n,再分别输入n个数组元素,数据之间用空格隔开。数组元素不超过50个。
【输出形式】输出求出的若干个平均值,每个数据之间用空格隔开,平均值用double表示,保留两位小数。

【样例输入】8 7 6 5 1 12 4 5 11
【样例输出】6.20 6.67

#include <stdio.h>

int main()
{
	int n, i, j, sum;
	double avg;
	scanf("%d", &n);
	
	int arr[n];
	
	for (i = 0; i < n; i++) 
	{
		scanf("%d", &arr[i]);
	}
	
	for (i = 0; i < n; i += 5) 
	{
		sum = 0;
		
		for (j = i; j < i + 5 && j < n; j++) 
		{
			sum += arr[j];
		}
		
		avg = (double)sum / (j - i);
		printf("%.2f ", avg);
	}
	return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

4. 折半查找

【问题描述】输入一组有序整数和一个待查整数,用折半查找法查找待查数据是否在这有序数中。
【输入形式】输入整数n代表有序数的个数(n不超过50),接着输入n个按升序排列的整数,最后输入一个待查数据。
【输出形式】如果查找成功,返回待查数据在数组中的下标;如果查找失败,输出“no“。

【样例输入】5 3 6 8 9 12 9
【样例输出】3

【样例输入】6 3 6 8 9 12 19 5
【样例输出】no

【样例说明】输入的数据之间用空格隔开

#include <stdio.h>

int search(int arr[], int n, int target)
{
	int left = 0;
	int right = n - 1;
	
	while (left <= right)
	{
		int mid = left + (right - left) / 2;
		
		if (arr[mid] == target) 
		{
			return mid;
		}
		else if (arr[mid] < target)
		{
			left = mid + 1;
		}
		else 
		{
			right = mid - 1;
		}
	}
	return -1;
}

int main()
{
	int n, target;
	
	scanf("%d", &n);
	
	int arr[n];
	
	for (int i = 0; i < n; i++) 
	{
		scanf("%d", &arr[i]);
	}

	scanf("%d", &target);
	
	int result = search(arr, n, target);
	
	if (result != -1) 
	{
		printf("%d\n", result);
	}
	else
	{
		printf("no");
	}
	return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

5. 十进制转换成R进制

【问题描述】输入一个十进制整数,将其转换成N进制数(1<N<=16)

【输入形式】一个十进制数 整数N
【输出形式】数字或字母由 (0-9,A,B,C,D,E,F)

【样例输入】300 16
【样例输出】12C

【样例输入】100 2
【样例输出】1100100

#include<stdio.h>
int main()
{
	int num, n, i, j, sum = 0;
	int s[100] = { 0 };
	
	scanf("%d%d", &num, &n);
	
	for (i = 0; num != 0; i++)
	{
		sum = num % n;
		num = num / n;
		s[i] = sum;
	}
	
	for (j = i - 1; j >= 0; j--)
	{
		if (s[j] >= 10)
		{
			printf("%c", s[j] + 55);
		}
		else
		{
			printf("%d", s[j]);
		}	
	}
	return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

6. 求整数数组组中特定值K出现次数

【问题描述】求整数数组组中特定值出现次数。

【输入形式】输入N个整数,以-1作为结束(-1不记在数组中),然后输入一个整数K,数据以空格隔开
【输出形式】整数K在N个整数中出现的次数C

【样例输入】3 1 1 2 2 3 -1 2
【样例输出】2

【样例输入】3 1 1 2 2 3 -1 0
【样例输出】0

【特殊说明】数组元素个数不超过50个

#include <stdio.h>
int main() 
{
	int K, count = 0,total = 0;
	int arr[20];
	
	for (int i = 0; i < 50; i++)
	{
		scanf("%d", &arr[i]);
		if (arr[i] == -1) 
		{
			break;
		}
		total++;
	}
	
	scanf("%d", &K);
	
	for (int i = 0; i < total; i++)
	{
		if (arr[i] == K)
		{
			count++;
		}
	}
	
	printf("%d\n", count);
	return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

7. 数组最大、最小元素与第一个和最后一个元素的对调

【问题描述】输入n个整数,其中n为大于等于2 的正整数。将数组中最大元素与第一个元素对调,最小元素与最后一个元素对调,并输出新数组。

【输入形式】n及n个整数
【输出形式】n个整数

【样例输入】10 1 2 3 4 5 6 7 8 9 10
【样例输出】10 2 3 4 5 6 7 8 9 1

#include <stdio.h>

int main()
{
	int n, i, max, min, temp;
	scanf("%d", &n);
	int arr[n];
	
	for(i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	
	max = arr[0];
	min = arr[0];
	
	for(i = 1; i < n; i++)
	{
		if(arr[i] > max)
		{
			max = arr[i];
		}
		if(arr[i] < min)
		{
			min = arr[i];
		}
	}
	
	for(i = 0; i < n; i++)
	{
		if(arr[i] == max)
		{
			temp = arr[0];
			arr[0] = max;
			arr[i] = temp;
		}
		if(arr[i] == min)
		{
			temp = arr[n-1];
			arr[n-1] = min;
			arr[i] = temp;
		}
	}
	
	for(i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
	
	return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

今天的内容就分享这么多
求三连!!!
求关注!!!

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NineSense

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值