一、【一维数组】BC100-有序序列合并
1.题目
描述:
输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
数据范围: 1 ≤ n,m ≤ 1000 ,序列中的值满足 0 ≤ val ≤ 30000
输入描述:
输入包含三行
第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。
第二行包含n个整数,用空格分隔。
第三行包含m个整数,用空格分隔。输出描述:
输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。
示例
输入:
5 6 1 3 7 9 22 2 8 10 17 33 44输出:
1 2 3 7 8 9 10 17 22 33 44
2.代码
#include <stdio.h>
int main()
{
int n = 0;
int m = 0;
int arr1[100] = {0};
int arr2[100] = {0};
//输入
scanf("%d %d", &n, &m);
int i = 0;
for(i=0; i<n; i++)
{
scanf("%d", &arr1[i]);
}
for(i=0; i<m; i++)
{
scanf("%d", &arr2[i]);
}
//处理
int j = 0;
i = 0;
while(i<n && j<m)
{
if(arr1[i] < arr2[j])
{
printf("%d ", arr1[i]);
i++;
}
else
{
printf("%d ", arr2[j]);
j++;
}
}
if(i == n)
{
for(; j<m; j++)
{
printf("%d ", arr2[j]);
}
}
else
{
for(; i<n; i++)
{
printf("%d ", arr1[i]);
}
}
return 0;
}
二、BC96-有序序列判断
1.题目
描述:
输入一个整数序列,判断是否是有序序列。有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。
数据范围: 3≤n≤50 序列中的值都满足 1≤val≤100
输入描述:
第一行输入一个整数n(3≤n≤50)。
第二行输入n个整数,用空格分隔n个整数。
输出描述:
输出为一行,如果序列有序输出sorted,否则输出unsorted。
示例
输入:
5 1 6 9 22 30输出:
sorted
2.代码
#include <stdio.h>
int main()
{
int n = 0;
int arr[50] = {0};
scanf("%d", &n);
int i = 0;
int flag1 = 0;
int flag2 = 0;
for(i=0; i<n; i++)
{
scanf("%d", &arr[i]);
if(i>0)
{
if(arr[i]>arr[i-1])
flag1 = 1;
else if(arr[i]<arr[i-1])
flag2 = 1;
}
}
//flag1 和 flag2 都为1是乱序的
if(flag1+flag2 > 1)
printf("unsorted\n");
else
printf("sorted\n");
return 0;
}
三、BC54-获得月份天数
1.题目
描述:
KiKi想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。
输入描述:
多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。
输出描述:
针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。
示例
输入:
2008 2输出:
29
2.代码
#include <stdio.h>
int main()
{
int y = 0;
int m = 0;
int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
while(scanf("%d%d", &y, &m) != EOF)
{
int day = days[m-1];
if((y%4==0 && y%100!=0) || (y%400==0))
{
if(m == 2)
day += 1;
}
printf("%d\n", day);
}
return 0;
}