题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2019
看到题目首先总想怎么在数组中插入一个数,后来看到题目说是排好序的突然就想到了比较相邻的两个数。
代码:
#include<stdio.h>
int main()
{
int n,m,x,i,flag,a[101];
while(~scanf("%d %d",&n,&m)&&(n,m))
{
for(flag=0,i=0;i<n+1;i++)//**(n+1)多存一个m**//
{
scanf("%d",&x);
if(x<m||flag==1)//flag进行标记,防止进行多次插入**//
{
a[i]=x;
}
else
{
a[i]=m;
a[i+1]=x;
i++;//**跳入下一次循环**//
flag=1;//**因为只需要插入一次,进行标记**//
}
}
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("%d\n",a[n]);
}
return 0;
}
下面一段是用链表写的。。。。。。
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node
{
int num;
node *next;
};
int main()
{
int n,m,i;
while(~scanf("%d %d",&n,&m)&&(n,m))
{
node *root=(node *)malloc(sizeof(node));/*root为头结点*/
root->next=NULL;
node *p=root;/*p作为连接*/
for(i=1;i<=n;i++)
{
node *temp=(node *)malloc(sizeof(node));/*开辟内存*/
scanf("%d",&temp->num);
temp->next=NULL;
p->next=temp;
p=p->next;
}
p=root;
while(p->next!=NULL)
{
if(p->next->num>=m)
{
node *temp=(node *)malloc(sizeof(node));
temp->num=m;
temp->next=p->next;
p->next=temp;/*插入*/
break;
}
p=p->next;/*顺序后移*/
}
p=root;
printf("%d",p->next->num);
p=p->next;
while(p->next!=NULL)
{
printf(" %d",p->next->num);
p=p->next;
}
printf("\n");
}
return 0;
}