Problem C: 零起点学算法83——数组中删数

本文探讨了在给定数组中删除指定数字的算法实现,通过continue语句而非break语句来确保仅删除首次出现的目标数字,同时保持数组元素的原有顺序。文章提供了完整的C语言代码示例,并讨论了输出格式的细节处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem C: 零起点学算法83——数组中删数

分析

关键是进行首项是不是要删去数字的判断,这种只要要求删去一个数字的功能只需要使用continue语句而不是break语句。

Description

在给定的数组中删除一个数

Input

多组测试,每组第一行输入1个整数n(n<20),然后是n个整数 第二行输入1个整数m

Output

删除在第一行的n个整数中第一次出现数字m并删除,然后按照顺序输出剩下的数, 最后一个数后面无空格

Sample Input

4 1 2 3 4
3

Sample Output

1 2 4

HINT

m有可能在原数组中找不到,找不到则输出原数组

#include<stdio.h>
int main(){
      int a[100],n,i,k,m,ch=1;
      while(scanf("%d",&n)!=EOF){

            for(i=0;i<n;i++)
             scanf("%d",&a[i]);
             scanf("%d",&k);
        if(k!=a[0]){
                printf("%d",a[0]);
            for(i=1;i<n;i++){
                  if(k==a[i]) continue;
                  printf(" %d",a[i]);
            }
         }
         else{
            printf("%d",a[1]);
            for(i=2;i<n;i++)
            printf(" %d",a[i]);
         }
         printf("\n");
      }
      return 0;

}

总结

1、对于末尾输出无空格情况就要将首项的输出格式与其他项分开。
2、对于判断和循环的符合语句,可以在程序最终的部分再添加换行符。

### 带有约束条件的 argmax 优化问题 对于带有约束条件的 `argmax` 优化问题,通常涉及到寻找满足特定约束条件下使目标函最大化的参数组合。这类问题广泛存在于工程设计、资源分配等领域。 #### 进化算法框架下的解决方案 在处理此类问题时,进化算法提供了一种有效的途径。通过使用 Geatpy 工具箱中的进化算法框架,能够灵活地定义并求解带约束的单目标优化问题[^2]。该框架允许用户专注于清晰描述待解决问题的具体细节,而无需关心底层算法的选择或实现方式。 具体来说,在编写问题类的过程中只需要关注如何准确表达变量范围、目标函以及任何附加的不等式/等式形式的约束条件;至于后续选用何种具体的搜索策略(比如遗传算法GA)、染色体编码方案则由库内部机制自动决定。 #### 实现示例:基于 Python 的简单案例 下面给出一段简单的 Python 代码片段来展示如何利用上述提到的方法论去构建一个基本模型: ```python import numpy as np from geatpy import eaProblem, Population, GA class MyProblem(eaProblem.EA_Problem): def __init__(self): name = 'My Problem' # 初始化问题名称 M = 1 # 设置多目标优化的目标为1(即单目标) maxormins = [-1] # 定义最大化(-1)/最小化(+1)方向向量 Dim = 3 # 变量维度设为三维空间内的点坐标(x,y,z) varTypes = [0] * Dim # 所有决策变量均为连续型实值 lb = [0, 0, 0] # 各维下限设置成零起点 ub = [5, 5, 5] # 上界设定不超过五单位长度 lbin = [1] * Dim # 是否含边界值标志位列表,默认包含上下界限内取样 ubin = [1] * Dim super().__init__(name=name, M=M, maxormins=maxormins, Dim=Dim, varTypes=varTypes, lb=lb, ub=ub, lbin=lbin, ubin=ubin) def aimFunc(self, pop): # 目标函计算部分 Vars = pop.Phen # 获取当前群体中各成员对应的自变量矩阵 ObjV = -(Vars[:, 0]**2 + Vars[:, 1]**2 # 计算每个个体对应的目标函值 + (Vars[:, 2]-np.pi)**2).reshape((-1, self.M)) CV = [] # 存储违反程度数组初始化为空表 g1 = lambda x: sum((x - 2.5)**2) - 8 # 添加第一个约束g1<=0 g2 = lambda x: 9 - sum((x - 2.7)**2) # 添加第二个约束g2>=0转换后变为-g2<=0 for i in range(len(Vars)): cvi = [] if g1(Vars[i])>0:cvi.append(g1(Vars[i])) if (-g2(Vars[i]))>0:cvi.append(-g2(Vars[i])) CV.append(cvi) return ObjV, np.array(CV) if __name__ == '__main__': problem = MyProblem() # 创建问题实例对象 algorithm = GA.GA(problem) # 构建标准遗传算法(Genetic Algorithm)实例 # 并传入之前创建好的problem作为输入参之一 res = algorithm.run(seed=1) # 调用run方法执行一次完整的寻优过程, # 返回结果保存于res变量之中以便进一步分析解读。 ``` 此段程序展示了怎样借助 Geatpy 库快速搭建起针对某类特殊结构优化场景的应用原型——这里假设了一个三元二次多项式的极大似然估计任务,并施加了两个额外几何形状上的限制条件以模拟实际应用环境里可能遇到的各种复杂情况。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值