对于给定的整数,求出删除该整数中的一个数字后得到的最小值.
比如,1214 ,去掉2,得到的结果是114为最小值.
算法: 删除数字中的极大值( 左边的数字递增,右边紧邻的数字是减少的或者本身为最后一位。例如:1214 中的2 ; 122543中的5; 1334中的4)
证明:假设极大值为第i位,记为X[i].分2种情况,
1 。如果删除 i 左边的某位记第j位,即删除X[j]
删除前 ----jj+1---i----
删除 X[j] 后 ----j+1---i---
删除 X[i] 后 ----j ----------
因为i左边的是递增的,X[j] < x[j+1] , 删除X[j]后的值 比删除X[i] 的值大。 故 不可能删除比i左边的某位
2。 如果删除i 右边的某位,i 左边的那些位保持不变,而删除X[i]后,相比不删除X[i],X[i+1] 取代了X[i]的位置;而由于
X[i+1] < x[i] 的,所以删除X[i] 比 删除i 右边其他的任何一位都要小。
综上,故需要删除第i位。(极大值的那一位)
代码如下:(估计有更好的代码,如有请留言给我O(∩_∩)O谢谢)
#include <vector>
#include <iostream>
using namespace std;
void int_to_array(int N, vector< int > & A)
{
while(N)
{
A.push_back( N % 10);
N = N / 10;
}
}
int find_min(const int& N)
{
if( N>=0 && N <10) return 0;
vector< int > iv;
int_to_array(N, iv);
vector<int>::iterator ite = iv.end();
--ite;
//删去极大值(比左边所有位大,比右边紧邻着的一位小)
//vector end 1214 begin 删除2
for(;;)
{
if(ite == iv.begin() || *ite > *(ite-1)) //从左到右找到第一个比右边大的那一位,若没找到就是最右边一位
{
iv.erase(ite);
break;
}
--ite;
}
//把vetor转为int
int M = 0;
for(ite = iv.end() - 1; ; --ite)
{
M =M * 10 + *ite;
if(ite == iv.begin()) break;
}
return M;
}
int main()
{
for(int i = 500; i < 1000; i= i + 3)
{
cout<<"原来:"<< i << "减去一位"<< find_min(i)<<endl;
}
return 0;
}
分享到:
相关推荐
本篇将详细探讨如何使用C语言来找出给定一系列整数中的最小值,这对于初学者来说是一项基础但重要的任务。 首先,我们需要了解C语言的基本语法和数据类型。C语言中的整数类型通常有`int`,它能够存储正负整数。为了...
任意给定 n 个整数,求这 n 个整数序列的和、最小值、最大值 输入描述 输入一个整数n,代表接下来输入整数个数,n,接着输入n个整数,整数用int表示即可。 输出描述 输出整数序列的和、最小值、最大值。用空格隔开...
根据给定文件的信息,我们可以总结出以下详细的IT知识点: ### 1. 程序功能概述 本程序的功能是从用户输入的一系列正整数中计算并输出这些数的最大值、最小值以及平均值。当用户输入0时,表示数据输入结束。 ### 2...
题目要求给定一个整数数组,计算并返回数组中任意两个元素之差的最大值。 #### 解决方案 为了找到数组中任意两个元素之差的最大值,可以采用排序的方法。首先对数组进行排序,然后计算排序后数组中最大值与最小值...
在给定的部分内容中,通过一个循环实现了求五个数中的最大值和最小值的功能。 1. 初始化最大值和最小值均为第一个输入的数`a`。 2. 使用`for`循环四次,每次循环: - 输入一个新的数`b`。 - 如果`b`大于当前的最大...
- 给定一个包含 n 个整数的序列。 - 要求将这个序列分割为 m 个连续的子序列(每段子序列中的数在原序列中必须连续排列)。 - 目标是最小化这些子序列的和的最大值。 #### 输入输出格式 **输入**: - 第一行包含两...
C语言程序设计-求一批数中最大值和最小值的差
从键盘任意输入10个整数,用指针变量作函数参数编程计算最大值和最小值,并返回它们所在数组中的位置。
给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。
在VC环境中,你可以创建一个新的Win32控制台应用程序项目,将上述代码粘贴到主函数`main()`中,然后编译并运行,即可测试这个求最小值的功能。 总之,通过理解和运用基本的C++编程技巧,我们可以轻松地在Visual C++...
对于每一个 `i` (从 0 到 `(n+1)/2`),如果 `x[k+i] [i]`,则交换这两个值的位置。 3. 分别在数组的前半部分和后半部分查找最小值和最大值。 ### 5. 算法分析 #### 5.1 时间复杂度 - **最坏情况**:该算法的时间...
- 使用 `for` 循环,对每个位数进行处理,提取出该位上的数字,并将其乘以对应的位置系数,然后累加到 `sum` 变量中。 - 通过取模运算获取最低位数字,再通过除法运算去掉已处理过的最低位数字。 - **返回值**: ...
在这个特定的题目中,我们需要从一个精确的整数数组中删除两个最大值和两个最小值,而这个过程可以利用分治法来实现。 首先,让我们明确问题的定义。假设我们有一个整数数组`arr`,我们需要找到其中的两个最大值`...
输入在第一行中给出一个正整数n(1≤10)。第二行输入n个整数,用空格分开。 输出格式: 在一行中输出最大值及最大值的最小下标,中间用一个空格分开。 输入样例: 6 2 8 10 1 9 10 输出样例: 10 2
- 在 `getMinRow` 函数中,首先将最小值设为第一行的第一个元素 `*p[0]`。 - 然后通过两层循环遍历整个数组,比较每个元素与当前最小值 `min`,如果发现更小的值,则更新 `min` 和对应的行索引 `k`。 - 最后返回...
输入两个数求最大值最小值用Java编写一个应用程序,对程序中给定的两个整数,求其最大值和最小值,并把它们输出。 编写一个应用程序,给定两个正整数,求出它们之间的最大公约数,如6和8的最大公约数为2,8和12的...
1. **距离差**:给定一组正整数,其中的最大值记作`max`,最小值记作`min`,对于这组数中的任意一个数`x`,其到`max`和`min`的距离差`D`定义为`abs(abs(x - max) - abs(x - min))`,其中`abs()`表示求一个数的绝对值...
具体而言,题目提供了一个仅包含1至9数字的字符串,要求我们在该字符串中插入指定数量的加号(例如“+”),以形成一个算术表达式,并求得该表达式的最小值。 #### 题目示例 假设给定的数字串为`79846`,要求插入...
变量可以在函数内部或外部声明,本例中使用了一个名为`a`的整型数组来存储用户输入的10个整数。 ```cpp inta[10]; ``` ### 3. 输入输出操作 - **标准输入输出**:使用`cin`和`cout`进行输入输出操作。例如,在`...
在这个场景下,`maxmin()`函数递归地将数组分为两半,分别在每一半中找出最大值和最小值,然后将这两部分的结果合并,最终得到整个数组的最大值和最小值。 ```cpp void maxmin(int i, int j, int &fmax, int &fmin)...