首页 > 其他分享 >2023-10-21:用go语言,一共有三个服务A、B、C,网络延时分别为a、b、c 并且一定有:1 <= a <= b <= c <= 10^9 但是具体的延时数字丢失了,只有单次调用的时间 一次调

2023-10-21:用go语言,一共有三个服务A、B、C,网络延时分别为a、b、c 并且一定有:1 <= a <= b <= c <= 10^9 但是具体的延时数字丢失了,只有单次调用的时间 一次调

时间:2023-10-30 17:34:35浏览次数:42  
标签:status 10 网络延时 return int else && go times


2023-10-21:用go语言,一共有三个服务A、B、C,网络延时分别为a、b、c

并且一定有:1 <= a <= b <= c <= 10^9

但是具体的延时数字丢失了,只有单次调用的时间

一次调用不可能重复使用相同的服务,

一次调用可能使用了三个服务中的某1个、某2个或者全部3个服务

比如一个调用的时间,T = 100

100的延时可能来自以下7种情况:

a = 100,这次调用可能单独使用了A

b = 100,这次调用可能单独使用了B

c = 100,这次调用可能单独使用了C

a + b = 100,这次调用可能组合使用了A、B

a + c = 100,这次调用可能组合使用了A、C

b + c = 100,这次调用可能组合使用了B、C

a + b + c = 100,这次调用可能组合使用了A、B、C全部服务

那么可想而知,如果给的调用时间足够多,是可以猜测出a、b、c的

给定一个数组times,长度为n,并且一定有4 <= n <= 7

times[i] = s,表示i号调用用时s,而且times中一定都是正数且没有重复值。

请根据n次调用,猜测出a、b、c三元组可能的情况数。

如果任何a、b、c都无法匹配上给定的调用耗时,返回0,

测试的次数T <= 100,

也就是说,一共最多给定100个数组,每一次让你返回a、b、c三元组可能的情况数。

来自招商银行。

来自左程云

答案2023-10-21:

为什么用讯飞星火?

这次代码生成用的讯飞星火,生成完后,要略微修改下代码才能通过。另外c代码的生成,一直有问题,索性就不管了。

之前一直用的chatgpt,但那个地址不能用了,所以用讯飞星火试水。

文心一言以及其他产品,我也试了下,java代码太多,文心一言无法转换成其他代码,都有各自的问题,所以只能放弃。

大体过程如下:

1.首先,定义一个函数ways,接受一个整数数组times作为参数,并返回可能的情况数。

2.在ways函数中,创建一个长度为7的整数数组status,用于记录服务的延时情况。初始化为全0。

3.创建一个空的mapans,用于存储可能的三元组情况。

4.调用process函数,传入times、0、statusans作为参数。

5.返回ans的长度,即为可能的情况数。

6.在process函数中,判断是否已经遍历完了times数组,如果是,则进行下面的操作:

6.1.创建三个变量abc,用于存储可能的延时情况。

6.2.调用counts函数,获取当前status数组中非零元素的个数,存储在变量count中。

6.3.根据count的值,进行不同的情况判断:

6.3.1.如果count为0,说明三个服务都没有使用过,根据给定的关系式计算出abc的值。

6.3.2.如果count为1,说明只有一个服务被使用过,根据给定的关系式计算出abc的值。

6.3.3.如果count为2,说明有两个服务被使用过,根据给定的关系式计算出abc的值。

6.3.4.如果count为3,说明三个服务都被使用过,直接将status数组中的值赋给abc

6.4.调用verify函数,判断当前的abc是否满足条件,如果满足,则将其作为键存入ans中。

7.如果没有遍历完times数组,则进行递归操作:

7.1.遍历status数组,找到第一个为0的位置。

7.2.将当前遍历到的times元素赋值给status数组的该位置。

7.3.递归调用process函数,传入更新后的status数组,i+1ans作为参数。

7.4.将status数组的该位置重新置为0,进行下一次遍历。

8.在counts函数中,遍历status数组,统计非零元素的个数,并返回该个数。

9.在verify函数中,根据给定的条件,判断abc是否满足条件,如果满足则返回true,否则返回false。

go完整代码如下:

package main

import "fmt"

func ways(times []int) int {
	status := []int{0, 0, 0, 0, 0, 0, 0}
	ans := make(map[string]struct{})
	process(times, 0, status, ans)
	return len(ans)
}

func process(times []int, i int, status []int, ans map[string]struct{}) {
	if i == len(times) {
		a, b, c := 0, 0, 0
		count := counts(status)
		if count == 0 {
			a = (status[3] + status[4] - status[5]) / 2
			b = (status[3] + status[5] - status[4]) / 2
			c = (status[4] + status[5] - status[3]) / 2
		} else if count == 1 {
			if status[0] != 0 {
				a = status[0]
				if status[3] != 0 {
					b = status[3] - a
				}
				if status[4] != 0 {
					c = status[4] - a
				}
				if status[5] != 0 {
					if b != 0 && c == 0 {
						c = status[5] - b
					}
					if c != 0 && b == 0 {
						b = status[5] - c
					}
				}
			} else if status[1] != 0 {
				b = status[1]
				if status[3] != 0 {
					a = status[3] - b
				}
				if status[5] != 0 {
					c = status[5] - b
				}
				if status[4] != 0 {
					if a != 0 && c == 0 {
						c = status[4] - a
					}
					if c != 0 && a == 0 {
						a = status[4] - c
					}
				}
			} else {
				c = status[2]
				if status[4] != 0 {
					a = status[4] - c
				}
				if status[5] != 0 {
					b = status[5] - c
				}
				if status[3] != 0 {
					if a != 0 && b == 0 {
						b = status[3] - a
					}
					if b != 0 && a == 0 {
						a = status[3] - b
					}
				}
			}
		} else if count == 2 {
			if status[0] != 0 {
				a = status[0]
			}
			if status[1] != 0 {
				b = status[1]
			}
			if status[2] != 0 {
				c = status[2]
			}
			if a == 0 {
				if status[3] != 0 {
					a = status[3] - b
				} else if status[4] != 0 {
					a = status[4] - c
				} else {
					a = status[6] - b - c
				}
			} else if b == 0 {
				if status[3] != 0 {
					b = status[3] - a
				} else if status[5] != 0 {
					b = status[5] - c
				} else {
					b = status[6] - a - c
				}
			} else {
				if status[4] != 0 {
					c = status[4] - a
				} else if status[5] != 0 {
					c = status[5] - b
				} else {
					c = status[6] - a - b
				}
			}
		} else {
			a = status[0]
			b = status[1]
			c = status[2]
		}
		if verify(status, a, b, c) {
			ans[fmt.Sprint(a)+"_"+fmt.Sprint(b)+"_"+fmt.Sprint(c)] = struct{}{}
		}
	} else {
		for j := 0; j < 7; j++ {
			if status[j] == 0 {
				status[j] = times[i]
				process(times, i+1, status, ans)
				status[j] = 0
			}
		}
	}
}

func counts(status []int) int {
	count := 0
	for i := 0; i < 3; i++ {
		if status[i] != 0 {
			count++
		}
	}
	return count
}

func verify(status []int, a, b, c int) bool {
	if a <= 0 || b <= 0 || c <= 0 || a > b || b > c {
		return false
	}
	if status[0] != 0 && status[0] != a {
		return false
	}
	if status[1] != 0 && status[1] != b {
		return false
	}
	if status[2] != 0 && status[2] != c {
		return false
	}
	if status[3] != 0 && status[3] != a+b {
		return false
	}
	if status[4] != 0 && status[4] != a+c {
		return false
	}
	if status[5] != 0 && status[5] != b+c {
		return false
	}
	if status[6] != 0 && status[6] != a+b+c {
		return false
	}
	return true
}

func main() {
	times := []int{1, 2, 3, 4, 5, 6, 7}
	fmt.Println(ways(times))
}

2023-10-21:用go语言,一共有三个服务A、B、C,网络延时分别为a、b、c 并且一定有:1 <= a <= b <= c <= 10^9 但是具体的延时数字丢失了,只有单次调用的时间 一次调_java

rust完整代码如下:

use std::collections::HashSet;

fn main() {
    let status = [1, 2, 3, 4, 5, 6, 7];
    let ans = ways(&status);
    println!("Hello, World {}", ans);
}

fn ways(times: &[i32]) -> usize {
    let mut status = [0; 7];
    let mut ans = std::collections::HashSet::new();
    process(times, 0, &mut status, &mut ans);
    ans.len()
}

fn process(times: &[i32], i: usize, status: &mut [i32], ans: &mut HashSet<String>) {
    if i == times.len() {
        let a = if status[0] != 0 {
            status[0]
        } else {
            (status[3] + status[4] - status[5]) / 2
        };
        let b = if status[1] != 0 {
            status[1]
        } else {
            (status[3] + status[5] - status[4]) / 2
        };
        let c = if status[2] != 0 {
            status[2]
        } else {
            (status[4] + status[5] - status[3]) / 2
        };
        if verify(status, a, b, c) {
            let a_str = a.to_string();
            let b_str = b.to_string();
            let c_str = c.to_string();
            ans.insert(format!("{}-{}-{}", a_str, b_str, c_str));
        }
    } else {
        for j in 0..7 {
            if status[j] == 0 {
                status[j] = times[i];
                process(times, i + 1, status, ans);
                status[j] = 0;
            }
        }
    }
}

fn verify(s: &[i32], a: i32, b: i32, c: i32) -> bool {
    if a <= 0 || b <= 0 || c <= 0 || a > b || b > c {
        return false;
    }
    if s[0] != 0 && s[0] != a {
        return false;
    }
    if s[1] != 0 && s[1] != b {
        return false;
    }
    if s[2] != 0 && s[2] != c {
        return false;
    }
    if s[3] != 0 && s[3] != a + b {
        return false;
    }
    if s[4] != 0 && s[4] != a + c {
        return false;
    }
    if s[5] != 0 && s[5] != b + c {
        return false;
    }
    if s[6] != 0 && s[6] != a + b + c {
        return false;
    }
    true
}

2023-10-21:用go语言,一共有三个服务A、B、C,网络延时分别为a、b、c 并且一定有:1 <= a <= b <= c <= 10^9 但是具体的延时数字丢失了,只有单次调用的时间 一次调_java_02

c++完整代码如下:

#include <iostream>
#include <vector>
#include <string>
#include <unordered_set>

using namespace std;

bool verify(std::vector<int> s, int a, int b, int c);

int counts(vector<int> status);

void process(vector<int> times, int i, vector<int>& status, unordered_set<string>& ans);

int ways(vector<int> times) {
    vector<int> status(7);
    unordered_set<string> ans;
    process(times, 0, status, ans);
    return ans.size();
}

void process(vector<int> times, int i, vector<int>& status, unordered_set<string>& ans) {
    if (i == times.size()) {
        int a = 0;
        int b = 0;
        int c = 0;
        int cnt = counts(status);
        if (cnt == 0) {
            a = (status[3] + status[4] - status[5]) / 2;
            b = (status[3] + status[5] - status[4]) / 2;
            c = (status[4] + status[5] - status[3]) / 2;
        }
        else if (cnt == 1) {
            if (status[0] != 0) {
                a = status[0];
                if (status[3] != 0) {
                    b = status[3] - a;
                }
                if (status[4] != 0) {
                    c = status[4] - a;
                }
                if (status[5] != 0) {
                    if (b != 0 && c == 0) {
                        c = status[5] - b;
                    }
                    if (c != 0 && b == 0) {
                        b = status[5] - c;
                    }
                }
            }
            else if (status[1] != 0) {
                b = status[1];
                if (status[3] != 0) {
                    a = status[3] - b;
                }
                if (status[5] != 0) {
                    c = status[5] - b;
                }
                if (status[4] != 0) {
                    if (a != 0 && c == 0) {
                        c = status[4] - a;
                    }
                    if (c != 0 && a == 0) {
                        a = status[4] - c;
                    }
                }
            }
            else {
                c = status[2];
                if (status[4] != 0) {
                    a = status[4] - c;
                }
                if (status[5] != 0) {
                    b = status[5] - c;
                }
                if (status[3] != 0) {
                    if (a != 0 && b == 0) {
                        b = status[3] - a;
                    }
                    if (b != 0 && a == 0) {
                        a = status[3] - b;
                    }
                }
            }
        }
        else if (cnt == 2) {
            if (status[0] != 0) {
                a = status[0];
            }
            if (status[1] != 0) {
                b = status[1];
            }
            if (status[2] != 0) {
                c = status[2];
            }
            if (a == 0) {
                if (status[3] != 0) {
                    a = status[3] - b;
                }
                else if (status[4] != 0) {
                    a = status[4] - c;
                }
                else {
                    a = status[6] - b - c;
                }
            }
            else if (b == 0) {
                if (status[3] != 0) {
                    b = status[3] - a;
                }
                else if (status[5] != 0) {
                    b = status[5] - c;
                }
                else {
                    b = status[6] - a - c;
                }
            }
            else {
                if (status[4] != 0) {
                    c = status[4] - a;
                }
                else if (status[5] != 0) {
                    c = status[5] - b;
                }
                else {
                    c = status[6] - a - b;
                }
            }
            if (verify(status, a, b, c)) {
                ans.insert(to_string(a) + "_" + to_string(b) + "_" + to_string(c));
            }
        }
        else {
            a = status[0];
            b = status[1];
            c = status[2];
        }
        if (verify(status, a, b, c)) {
            ans.insert(to_string(a) + "_" + to_string(b) + "_" + to_string(c));
        }
    }
    else {
        for (int j = 0; j < 7; j++) {
            if (status[j] == 0) {
                status[j] = times[i];
                process(times, i + 1, status, ans);
                status[j] = 0;
            }
        }
    }
}

int counts(vector<int> status) {
    int cnt = 0;
    for (int i = 0; i < 3; i++) {
        if (status[i] != 0) {
            cnt++;
        }
    }
    return cnt;
}

bool verify(std::vector<int> s, int a, int b, int c) {
    if (a <= 0 || b <= 0 || c <= 0 || a > b || b > c) {
        return false;
    }
    if (s[0] != 0 && s[0] != a) {
        return false;
    }
    if (s[1] != 0 && s[1] != b) {
        return false;
    }
    if (s[2] != 0 && s[2] != c) {
        return false;
    }
    if (s[3] != 0 && s[3] != a + b) {
        return false;
    }
    if (s[4] != 0 && s[4] != a + c) {
        return false;
    }
    if (s[5] != 0 && s[5] != b + c) {
        return false;
    }
    if (s[6] != 0 && s[6] != a + b + c) {
        return false;
    }
    return true;
}

int main() {
    std::vector<int> status = { 1, 2, 3, 4, 5, 6, 7 };
    int ans = ways(status);
    std::cout << "Hello, World " << ans << std::endl;
    return 0;
}

2023-10-21:用go语言,一共有三个服务A、B、C,网络延时分别为a、b、c 并且一定有:1 <= a <= b <= c <= 10^9 但是具体的延时数字丢失了,只有单次调用的时间 一次调_java_03


标签:status,10,网络延时,return,int,else,&&,go,times
From: https://blog.51cto.com/moonfdd/8095782

相关文章

  • 文心一言 VS 讯飞星火 VS chatgpt (122)-- 算法导论10.4 3题
    三、用go语言,给定一个n结点的二叉树,写出一个O(n)时间的非递归过程,将该树每个结点的关键字输出。可以使用一个栈作为辅助数据结构。文心一言:以下是一个使用Go语言编写的函数,该函数使用一个栈作为辅助数据结构,以非递归方式遍历二叉树,输出每个结点的关键字。这个算法的时间复杂度为......
  • go 函数
    函数:声明: func函数名字(参数列表)(返回值列表){}举例: funcadd(){} funcadd(aint,bint)int{} funcadd(aint,bint)(int,int){}特点: a.不支持重载,一个包不能有两个名字一样的函数. b.函数也是一种类型,一个函数可以赋值给变量(这个变量是......
  • 数据库信息速递 MongoDB 在开发者工具中集成了AI功能提高开发工作者的效率 (译)...
    MongoDB在6月份向其NoSQLAtlas数据库服务(DBaaS)添加向量搜索功能之后,MongoDB正在为一些工具添加新的生成式AI功能,来以进一步提高开发者的工作效率。这些新功能已经添加到MongoDB的关系迁移工具中如,Compass、AtlasCharts工具中。在文档接口中,MongoDB添加了一个由AI驱动的聊天机器人......
  • 【GEE】Google Earth Engine(GEE)注册详细教程&无需教育邮箱
    ​    这个专栏真的是纠结了很久,不知道到底要不要分享自己在学习GEE的时候的一些经验和代码。因为本人在日常中使用Python和ENVI多点,虽然GEE也会用但不至于频繁使用,同时针对GEE其实官网给出了很多接口的使用方法,国内外也有很多人分享过一些实操代码,因此大部分代码可能都......
  • 代码随性训练营第十七天(Python)| 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之
    110.平衡二叉树1、递归法classSolution:defisBalanced(self,root:Optional[TreeNode])->bool:ifself.get_height(root)!=-1:#-1代表高度差大于1returnTrueelse:returnFalsedefget_height(self,root):......
  • Django实战项目-学习任务系统-定时任务管理
    接着上期代码框架,开发第4个功能,定时任务管理,再增加一个学习定时任务表,主要用来设置周期重复性的学习任务,定时周期,定时时间,任务标题和内容,预计完成天数,奖励积分和任务状态等信息。 现实中学习一门课程或一项技能知识,需要很长时间的学习积累才能学会,不像小说世界,游戏世界等虚拟世......
  • RabbitMQ安装——window10 64位
    一、下载并安装erlang环境  RabbitMQ是由erlang编程语言开发的消息队列,因此需要在电脑上安装erlang的环境。1、官网下载erlang环境在RabbitMQ的最新版本详情页面RabbitMQ Project Announcements — RabbitMQ查看最新版本支持的erlang环境,目前支持erlang的版本号为OTP25.x......
  • 2023.10.30日报
    今天继续在做ERP,昨天确实是做的有些烦躁了,因为无论如何调整都实现不了想要的功能今天冷静下来认真修改代码不得不说写代码还是很有成就感的事情 感觉就功能来说,这个页面已经比较成熟了也做了详细内容的展示和筛选排序和分页,并且后端也已经编写好了,之后的增删改查的模板基本都......
  • MIGO Runtime Errors MESSAGE_TYPE_X program SAPLCKM4 in PERIODENART_BESTIMMEN
    用户在测试环境执行MIGO,系统dump检查系统后,发现是物料账期错误 修改账期,系统正常 ......
  • test20231030
    rp大爆发(别一次用完就行了)。来晚了,差点没赶上考试。先看T1,看上去很像一个三维偏序问题,一看数据范围\(n\le3\times10^7\),不行,再看一眼题目,发现一句话请选手仔细观察给出的数据生成器,数据生成方式与解题强相关。阿这,原来是一道分析代码题。看他数据生成器:typedefunsig......