假期编程
此博客链接:https://www.cnblogs.com/ping2yingshi/p/12253690.html
1.数据的交换输出(33min)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2016
Problem Description
输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。
Input
输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,跟着就是n个整数。n=0表示输入的结束,不做处理。
Output
对于每组输入数据,输出交换后的数列,每组输出占一行。
Sample Input
4 2 1 3 4 5
5 4 3 2 1 0
Sample Output
1 2 3 4
1 4 3 2 5
题解:此题难点在于n=0时输入结束,这里需要在控制台能持续输入时,判断输入是否为零,要是输入为零时,使用break,跳出循环,程序结束。
代码如下:
#include<stdio.h> #include<math.h> #include<stdlib.h> int main(void) { int n; while(~scanf("%d",&n)) { if(n==0) break; int m[100]={0}; int i; for(i=0;i<n;i++) scanf("%d",&m[i]); int j; int k=0; int temp; int Min=10000; for(j=0;j<n;j++) if(Min>m[j]) { Min=m[j]; k=j; } temp=m[0]; m[0]=m[k]; m[k]=temp; for(i=0;i<n-1;i++) printf("%d ",m[i]); printf("%d",m[n-1]); printf("\n"); } return 0; }
2.数列有序 (19min)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2019
Problem Description
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
Input
输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。
Output
对于每个测试实例,输出插入新的元素后的数列。
Sample Input
3 3
1 2 4
0 0
Sample Output
1 2 3 4
题解:此题考的主要时在数组中按顺序插入元素,找到插入位置时,记得是从后向前移动数据后,在把要插入的数据插入到相应位置,要是从前向后移动数据,会把后面的数据覆盖掉。
代码如下:
#include<stdio.h> #include<math.h> #include<stdlib.h> //#define Min 100000 int main(void) { int n; int m; while(~scanf("%d %d",&n,&m)) { if((n==0)&&(m==0)) break; int c[100]={0}; int i; for(i=0;i<n;i++) scanf("%d",&c[i]); int j; int k; for(j=0;j<n;j++) { if(c[j]>m) { for(k=n;k>j;k--) c[k]=c[k-1]; c[j]=m; break; } } for(i=0;i<n;i++) printf("%d ",c[i]); printf("%d",c[n]); printf("\n"); } return 0; }
出来混总是要还的