-
简化的插入排序
输入在第一行先给出非负整数N(<=10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X
#include <stdio.h>
int main()
{
int n,i,x,t,j;
int index;
int a[100];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&x);
for(j=n-1;j>=0;j--) //从数组后面开始判断大小
{
if(x>a[j]) //如果插入数遇到比他小的,则该数插入在比他大的这个数的后一位
{
a[j+1] = x;
break; //插入完毕即退出循环
}
else //若插入数遇到比他大的,则该数不插入
{
a[j+1] = a[j]; //比他大的数后退一位
}
}
if(j<0)
a[0] = x; //若上面for循环中一直未遇到比他小的,则他为最小,为a[0]
for(i=0;i<=n;i++)
{
printf("%d ",a[i]); //从小到大排序输出
}
return 0;
}
-
交换最小值和最大值
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
注意:题目保证最大和最小值都是唯一的。
#include <stdio.h>
int main()
{
int n,i,j,k,t,max,min;
int a[100];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
max = min = a[0]; //对最大值与最小值赋初值
for(i=0;i<n;i++)
{
if(a[i]<=min) //寻找最小值
{
k = i;
min = a[k];
}
}
t = a[k]; //a[k]不能直接写为min 若这样,则会变成min与第一个数的值交换
a[k] = a[0]; //而数组里的那个最小值并没有跟第一个数交换
a[0] = t;
for(i=0;i<n;i++)
{
if(a[i]>=max) //寻找最大值
{
j = i;
max = a[j];
}
}
t = a[j]; //最大值与最后一个数交换
a[j] = a[n-1];
a[n-1] = t;
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
-
找出不是两个数组共有的元素
给定两个整型数组,本题要求找出不是两者共有的元素
#include <stdio.h>
int main()
{
int n1,n2,i,x,j,k=0;
int a[20],b[20],f[20];
scanf("%d",&n1);
for(i=0;i<n1;i++)
scanf("%d",&a[i]);
scanf("%d",&n2);
for(i=0;i<n2;i++)
scanf("%d",&b[i]);
for(i=0;i<n1;i++) //存放a数组独有的数字在f中
{
for(j=0;j<n2;j++)
{
if(a[i]==b[j])
break;
}
if(j>=n2)
f[k++] = a[i]; //一开始k=0,此处首先让f[k]=a[i],然后让k++
}
for(i=0;i<n2;i++) //存放b数组独有的数字在f中
{
for(j=0;j<n1;j++)
{
if(b[i] == a[j])
break;
}
if(j>=n1)
f[k++]=b[i]; //此处的k为上一个for循环逐增后的k
}
printf("%d",f[0]);
for(i=1;i<k;i++) //遍历f数组
{
for(j=0;j<i;j++)
{
if(f[i]==f[j])//遍历i以前的数字,看看有没有重复的
break; //如有重复,则跳出循环,不输出
}
if(j>=i) //非重复,已遍历完时j>=i,打印出这个数
printf(" %d",f[i]);
}
return 0;
}
-
求整数序列中出现次数最多的数
本题要求统计一个整型序列中出现次数最多的整数及其出现次数。
#include <stdio.h>
int main()
{
int n,i,k,t,max=0;
int a[100];
int b[100]={0}; //用来保存数字出现的次数,初始化为0
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]); //输入的数直接保存
}
int j;
for(j=0;j<=n;j++) //遍历与第n个数相等的数值
{
for(k=j;k<n;k++) //k=j,即出现了一次,b[j]++
{
if(a[k] == a[j])
b[j]++; //出现的数值的次数
}
}
for(i=0;i<n;i++)
{
if(b[i]>max) //寻找最大次数
{
max = b[i];
t = i; //获得的数字的最大次数对应的下标 ,a[t]即对应的那个数字
}
}
printf("%d %d",a[t],max);
return 0;
}