表中数据元素的数据类型为整型,按有序方式(从小到大)输入表中初始元素,再输入一个整数,以空格隔开,若有序表中已有该元素则退出,否则将整数插入到有序表中的正确位置,使其仍然有序。
输入描述:输入有序表中元素的个数 n,占一行; 按从小到大的顺序输入 n 个整数,以空格隔开,占一行; 输入待插入元素 x,占一行。
输出描述:输出有序表,以空格隔开,最后一个整数后面要求有空格。
输入样例1:
6
1 3 5 9 11 13
4
输出样例1:
1 3 4 5 9 11 13
输入样例2:
3
4 5 6
6
输出样例2:
4 5 6
补全如下代码
#include<stdio.h>
#define MAX_SIZE 50
int main()
{
int n, x, num;
scanf("%d", &n);
num = n;
int a[MAX_SIZE];
for(int i=0;i<n;i++)
scanf("%d", &a[i]);
scanf("%d", &x);
for(int j=0;j<n;j++)
{
if(x > a[n-1]) //插入表尾
{
/***********Begin***********/
/************End************/
}
if(x == a[j]) //有相同元素,退出循环
break;
if(x < a[j]) //插入顺序表
{
/***********Begin***********/
/************End************/
}
}
if(num > n)
for(int i=0;i<n+1;i++)
printf("%d ", a[i]);
else
for(int i=0;i<n;i++)
printf("%d ", a[i]);
return 0;
}
不要修改原代码,不要删除注释
代码如下:
#include<stdio.h>
#define MAX_SIZE 50
int main()
{
int n, x, num;
scanf("%d", &n);
num = n;
int a[MAX_SIZE];
for(int i=0;i<n;i++)
scanf("%d", &a[i]);
scanf("%d", &x);
for(int j=0;j<n;j++)
{
if(x > a[n-1]) //插入表尾
{
/***********Begin***********/
a[n] = x;
num++;
break;
/************End************/
}
if(x == a[j]) //有相同元素,退出循环
break;
if(x < a[j]) //插入顺序表
{
/***********Begin***********/
for(int k = n;k>j;k--)
a[k] = a[k-1];
a[j]=x;
num++;
break;
/************End************/
}
}
if(num > n)
for(int i=0;i<n+1;i++)
printf("%d ", a[i]);
else
for(int i=0;i<n;i++)
printf("%d ", a[i]);
return 0;
}
引用 皆我百晓生 小程序回复内容作答:
补全代码如下:
#include<stdio.h>
#define MAX_SIZE 50
int main()
{
int n, x, num;
scanf("%d", &n);
num = n;
int a[MAX_SIZE];
for(int i=0;i<n;i++)
scanf("%d", &a[i]);
scanf("%d", &x);
for(int j=0;j<n;j++)
{
if(x > a[n-1]) //插入表尾
{
a[n] = x;
n++;
break;
}
if(x == a[j]) //有相同元素,退出循环
break;
if(x < a[j]) //插入顺序表
{
for(int k=n-1;k>=j;k--)
a[k+1] = a[k];
a[j] = x;
n++;
break;
}
}
if(num > n)
for(int i=0;i<n+1;i++)
printf("%d ", a[i]);
else
for(int i=0;i<n;i++)
printf("%d ", a[i]);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!【相关推荐】
编写回溯算法代码时,要先考虑这个问题是一个什么搜索树,然后套用那个搜索树模板就行了。(例如:子集树就是:判断是否满足约束条件——计算、x[i]=1——递归左子树——归还——x[i]=0、递归右子树(注意限界思想))
(例如:排列树就是:循环——判断是否满足约束条件——交换——计算——递归(注意限界思想)——归还)
当然具体算法要具体分析
还要注意及时更新解和存储解,别忘了进入右子树、循环结束前,要将你算的、交换过的东西,要归还回去。注意到达叶结点干什么,没有到达怎么做
而分支限界算法的代码编写,首先编写三个类:活结点类、活结点属性类、入队类。然后选择好什么样的队列方式。一定要考虑好属性,然后什么时候添加结点、以及出队、和存储最优解
两个算法编写,还要注意限界函数的设置,怎么设计一个好的代价函数可以裁掉更多的空间。这就是两个算法的优化思想。
当然最重要的还要考虑好约束条件。
具体逻辑代码还是多写多练。多去总结。这里也就只讲个大体思路。