求大神给出完整c++源代码,在线等!!!!

问题描述:一个整形数组inta[100]保存1-100现在随机将其中两个数改为0,找出这两个数,要求时间和空间复杂度尽量小... 问题描述:一个整形数组int a[100] 保存1-100 现在随机将其中两个数改为0, 找出这两个数,要求时间和空间复杂度尽量小 展开
 我来答
于是我呵呵
推荐于2016-03-15 · 超过21用户采纳过TA的回答
知道答主
回答量:29
采纳率:0%
帮助的人:34.3万
展开全部
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <math.h>

using namespace std;

const int sum = 5050;
const int sum2 = 338350;

void find(int *a)
{
int m = sum, n = sum2;
for(int i = 0; i < 100; ++ i)
{
m -= a[i];
n -= a[i] * a[i];
}
int x = (sqrt((2 * n - m * m) * 1.0) + m) / 2;
cout << x << " " << m - x << endl;
}

int main()
{
int a[100];
for(int i = 0; i < 100; ++ i)
{
a[i] = i + 1;
}
srand((unsigned int)time(NULL));
a[rand() % 50] = 0;
a[rand() % 50 + 50] = 0;
cout << "Display after changes" << endl;
for(int i = 0; i < 100; ++ i)
{
cout << a[i] << " ";
}
cout << endl;
find(a);
return 0;
}
追问
有没有步骤分析?时间和空间复杂度是怎么理解的?
追答
两个未知数a,b,我知道a+b=m,a^2+b^2=n,求出a,b不是套用公式?结果应该很显然。
对于这个程序,你只需要看find函数
时间复杂度是O(n),我只是扫描了下数组再多几个单独操作
空间复杂度是O(1),毕竟数组是题目的要求,我开辟的辅助空间就是几个常量
如果你第二个问题问的是定义,我建议你好好看书,连这些都不懂最好别先搞算法
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式