题目1
有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。
核心思路:
定义一个数组group[n],再定义一个数组buf[n+m]
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*1、用户键入数组元素个数和移动步数*/
int count = 0 ; //数组中元素的个数
int step = 0 ; //移动的步数
printf("请输入整数的个数n:") ;
scanf("%d",&count) ;
printf("请输入移动的步数m:") ;
scanf("%d",&step) ;
char group[count] ; //数组1
char buf[count+step] ; //数组2,用于解决偏移越界问题
/*2、初始化数组1*/
for(int i=0 ; i<count ; i++)
{
group[i] = rand()%100 ; //随机生成0~99的数
}
//打印数组1
for(int i=0 ; i<count ; i++)
{
printf("%d ",group[i]) ;
}
printf("\n") ;
/*3、根据数组1偏移指定步数,初始化数组2*/
//数组2从下标step开始,赋数组1的值
for(int i=0 ; i<count ; i++)
{
buf[step+i] = group[i] ;
}
//数组2下标0~step的元素,赋值数组1的后step个元素
for(int i=0 ; i<step ; i++)
{
buf[i] = group[count-step+i] ;
}
//打印数组2
for(int i=0 ; i<count ; i++)
{
printf("%d ",buf[i]) ;
}
printf("\n") ;
}
运行结果:
![](https://img-blog.csdnimg.cn/img_convert/f08b1a9f7ba649465f4af8542f573494.png)
题目2
输入10个整数,将其中最小的数与第一个数对换, 把最大的数与最后一个数对换。
核心思路:
定义4个局部变量,分别临时存放最大数、最大数的位置、最小数、最小数的位置。
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*1、初始化数组*/
int group[10] ;
for(int i=0 ; i<10 ; i++)
{
group[i] = rand()%100 ; //随机生成0~99的数
}
//打印数组
printf("处理前:") ;
for(int i=0 ; i<10 ; i++)
{
printf("%d ",group[i]) ;
}
printf("\n") ;
//定义局部变量
int max = group[0] ; //最大数
int min = group[0] ; //最小数
int max_local = 0 ; //最大数的数组下标
int min_local = 0 ; //最小数的数组下标
/*2、遍历数组,记录最大数、最大数的位置、最小数、最小数的位置*/
for(int i=0 ; i<9 ; i++)
{
if(group[i+1]>group[max_local])
{
max_local = i+1 ; //最大数的位置
max = group[i+1] ; //最大数
}
if(group[i+1]<group[min_local])
{
min_local = i+1 ; //最小数的位置
min = group[i+1] ; //最小数
}
}
//交换最小数和第一个数的位置
group[min_local] = group[0] ;
group[0] = min ;
//交换最大数和最后一个数的位置
group[max_local] = group[9] ;
group[9] = max ;
//打印交换后的数组
printf("处理后:") ;
for(int i=0 ; i<10 ; i++)
{
printf("%d ",group[i]) ;
}
printf("\n") ;
}
运行结果:
![](https://img-blog.csdnimg.cn/img_convert/b76548e06602fe75d7135c3c75240a6a.png)