7-11 sdut-C语言实验- 数列有序!
分数 14
全屏浏览题目
切换布局
作者 马新娟
单位 山东理工大学
有n(n<=100)个整数,已经按照从大到小顺序排列好,现在另外给一个整数m,请将该数插入到序列中,并使新的序列仍然有序。
输入格式:
输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0表示输入数据的结束,本行不做处理。
输出格式:
对于每个测试实例,输出插入新的元素后的数列。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[105];
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0&&m==0)
break;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
a[n+1]=m;
for(int i=1;i<=n;i++)
{
if(m>a[i])
{
int t=a[i];
for(int f=n;f>=i;f--)
{
a[f+1]=a[f];
}
a[i]=m;
break;
}
}
for(int i=1;i<=n+1;i++)
{
printf("%d",a[i]);
if(i<n+1)
printf(" ");
}
}
return 0;
}
7-12 sdut-C语言实验- 中位数
分数 12
全屏浏览题目
切换布局
作者 马新娟
单位 山东理工大学
中位数是指在一组数据中,按数值大小排序后处于中间位置的数。例如:1, 5, 3 排序后为 1, 3, 5,则其中位数为 3。特别地,当数的个数 N 为偶数时,中位数取位置居中的两个数 (N/2 和 N/2+1) 的平均值,例如:1, 2, 3, 4,中位数为 (2+3)/2 = 2.5。
给定一组数,你能求出中位数吗?
输入格式:
输入数据有多组(数据组数不超过 100),到 EOF 结束。
对于每组数据:
第 1 行输入一个整数 n (3 <= n <= 100),表示数的个数。
第 2 行输入 n 个用空格隔开的整数 Ai (0 <= Ai <= 1000),依次表示每一个数,保证互不重复。
输出格式:
对于每组数据,在一行中输出一个实数(保留 1 位小数),表示这组数据的中位数。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,z=0;
double a[105];
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
{
scanf("%lf",&a[i]);
}
for(int i=1;i<n;i++)
{
for(int t=n;t>i;t--)
{
if(a[t]<a[t-1])
{
int f=a[t];
a[t]=a[t-1];
a[t-1]=f;
}
}
}
if(n%2==1)
{
z=n/2+1;
printf("%.1f\n",a[z]*1.0);
}
else
{
z=n/2;
printf("%.1f\n",(a[z]+a[z+1])/2.0);
}
}
return 0;
}
7-13 sdut-C语言实验-各位数字之和排序
分数 12
全屏浏览题目
切换布局
作者 马新娟
单位 山东理工大学
给定n个正整数,根据各位数字之和从小到大进行排序。
输入格式:
输入数据有多组,每组数据占一行,每行的第一个数正整数n,表示整数个数,后面接n个正整数。当n为0时,不作任何处理,输入结束。n<=10。
输出格式:
输出每组排序的结果。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,m;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
int a[15]={0};
int b[15]={0};
for(int i=1;i<=n;i++)
{
scanf("%d",&m);
b[i]=m;
while(m)
{
int t=m%10;
a[i]+=t;
m/=10;
}
}
for(int i=1;i<n;i++)
{
for(int t=n;t>i;t--)
{
if(a[t]<a[t-1])
{
int f=a[t];
a[t]=a[t-1];
a[t-1]=f;
f=b[t];
b[t]=b[t-1];
b[t-1]=f;
}
}
}
for(int i=1;i<=n;i++)
{
printf("%d",b[i]);
if(i<n)
printf(" ");
}
printf("\n");
}
return 0;
}
7-14 sdut-C语言实验- 冒泡排序中数据交换的次数
分数 18
全屏浏览题目
切换布局
作者 马新娟
单位 山东理工大学
听说过冒泡排序么?一种很暴力的排序方法。今天我们不希望你用它来排序,而是希望你能算出从小到大冒泡排序的过程中一共进行了多少次数据交换。
输入格式:
输入数据的第一行为一个正整数 T ,表示有 T 组测试数据。
接下来T行,每行第一个整数N, 然后有N个整数,无序。0<N <= 100
输出格式:
输出共 T 行。
每行一个整数,代表本行数据从小到大冒泡排序所进行的交换次数
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,a[105];
scanf("%d",&n);
while(n--)
{
int sum=0,m;
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%d",&a[i]);
}
for(int i=1;i<m;i++)
{
for(int f=m;f>i;f--)
{
if(a[f]<a[f-1])
{
int t=a[f];
a[f]=a[f-1];
a[f-1]=t;
sum++;
}
}
}
printf("%d\n",sum);
}
return 0;
}