1.逆序存放数组中的数据,并输出指定元素
本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按要求输出指定的数组元素。
输入格式:
在第一行中给出一个正整数n(1≤n≤10)。第二行输入n个整数,用空格分开。第三行输入一个非负整数m(m<n)。
输出格式:
在一行中输出逆序存放后下标为m的数组元素。行末无空格。
输入样例:
6
10 8 1 2 3 4
2
输出样例:
2
(1)编程思路。
要将数组a中的n个元素逆序,只需将a[0]与a[n-1]、a[1]与a[n-2]、…、a[i]与a[n-1-i]交换即可,这样的交换共进行n/2组。采用一个简单的一重循环来完成。python正则表达式在线生成器
for (int i=0;i<n/2;i++)
{
int t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;
}
(2)源程序。
#include <stdio.h>
int main ()
{
int n,m;
scanf("%d",&n);
int a[10];
int i;
for (i=0;i<n;i++)
scanf("%d",&a[i]);
for (int i=0;i<n/2;i++)
{
int t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;
}
scanf("%d",&m);
printf("%d\n",a[m]);
return(0);
}
2.交换最小值和最大值
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
注意:题目保证最大和最小值都是唯一的。
输入格式:
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。
输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。
输入样例:
5
8 2 5 1 4
输出样例:
1 2 5 4 8
(1)编程思路。
在数组中最大值和最小值的方法是:先认为第1个元素a[0]的值既是最大值也是最小值,即max=min=0(注意:此处保留的是最大值与最小值的下标)。之后用循环对剩下的N-1个元素进行遍历。若元素a[i]比最大值a[max]大,更新最大值下标max;若元素a[i]比最小值a[min]小,更新最小值下标min。
到最大值下标max和最小值下标min后,按要求进行元素交换即可。
(2)源程序。
#include <stdio.h>
#include <math.h>
int main ()
{
int n;
scanf("%d",&n);
int a[10];
int i;
for (i=0;i<n;i++)
scanf("%d",&a[i]);
int mini=0,maxi=0;
for (i=1;i<n;i++)
{
if (a[mini]>a[i]) mini=i;
if (a[maxi]<a[i]) maxi=i;
}
int t;
t=a[0]; a[0]=a[mini]; a[mini]=t;
if (maxi==0) maxi=mini;
t=a[n-1]; a[n-1]=a[maxi]; a[maxi]=t;
for (int i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
return(0);
}
3.简化的插入排序
本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。
输入格式:
输入在第一行先给出非负整数N(<10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。
输出格式:
在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后面有一个空格。
输入样例:
5
1 2 4 5 7
3
输出样例:
1 2 3 4 5 7
(1)编程思路。
要将整数x插入到有序序列a[0]~a[n-1]中,采用如下的循环到一个插入位置并插入x即可。插入位置时,从后往前,若当前元素值大于x,则该元素向后移,留出插入的位置。
for (i=n-1;i>=0;i--)
{
if (a[i]>x) a[i+1]=a[i];
else break;
}
a[i+1]=x;
(2)源程序。
#include <stdio.h>
#include <math.h>
int main ()
{
int n;
scanf("%d",&n);
int a[11];
int i;
for (i=0;i<n;i++)
scanf("%d",&a[i]);
int x;
scanf("%d",&x);
阶乘函数的解析延拓 for (i=n-1;i>=0;i--)
{
if (a[i]>x) a[i+1]=a[i];
else break;
}
a[i+1]=x;
for (int i=0;i<=n;i++)
printf("%d ",a[i]);
printf("\n");
return(0);
}
4.求整数序列中出现次数最多的数
本题要求统计一个整型序列中出现次数最多的整数及其出现次数。
输入格式:
输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。
输出格式:
在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。
输入样例:
chip select是什么意思10 3 2 -1 5 3 4 3 0 3 2
输出样例:
3 4
(1)编程思路。
定义数组 int a[1000];保存输入的N个整数,先用冒泡排序对数组a按从小到大的顺序排序,这样,相同的整数在数组中一定连续存放。
为求得出现次数最多的整数ansnum及其出现次数ans,对数组a进行遍历。
初始时,置ans=1,ansnum=a[0],num=a[0],cnt=1;,表示a画家米勒[0]出现次数最多,次数为1,当前数num为a[0],有cnt=1个。
之后用一重循环 冒泡排序代码c语言for (i=1;i<n;i++)对数组的其他元素进行遍历,对每个元素a[i]
若 a[i]==num,表示当前数又出现一次,计数cnt++;
若a[i]!=num,当前数num不会再出现了,若num出现的次数最多,更新出现次数最多的整数ansnum=num及其出现次数ans=cnt;之后置num=a[i],cnt=1,a[i]称为新的当前数,出现了1次。
(2)源程序。
#include <stdio.h>
#include <math.h>
int main ()
{
int n;
scanf("%d",&n);
int a[1000];
int i,j,t;
for (i=0;i<n;i++)
scanf("%d",&a[i]);
for (i=0;i<n-1;i++)
for (j=0;j<n-1-i;j++)
if (a[j]>a[j+1])
{
t=a[j]; a[j]=a[j+1]; a[j+1]=t;
}
int ans=1,ansnum=a[0],num=a[0],cnt=1;
for (i=1;i<n;i++)
if (a[i]!=num)
{
if (ans<cnt)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论