gpt4 book ai didi

c# - 不同数字的组合及其关系

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:05:43 27 4
gpt4 key购买 nike

我用 C# 编写了一个简单的程序来生成一组五个数字的不同组合。生成的组合将存储在 int 数组中。它将被五个五个阅读。

int[] number = new int[no_of_combination];

我想找出这些组合中重复了多少个数字。例如 {1 2 3 4 5} 和 {3 4 5 6 7} 有三个重复的数字,它们是 {3 4 5}

我的方法是将每个组合与所有其他组合进行比较。对于 n 个组合,将进行 n(n-1)/2 次比较。结果(重复数字的数量和它们的对应值)将存储在对象数组中。如果 n 很大,比如说 100000,那么操作的次数就会非常多。这会占用大量内存来存储结果。

    int[] init = new int[6]; // 6 for no repeat,1,2,3,4 and 5, init counting the number of combinations in each repeated number group
RepeatedSet[,] S = new RepeatedSet[6,number.Length*number.Length];
for(int i=0;i<number.Length-1;i++)
{
for(int j=i+1;j<number.Length;j++)
{
int no_of_repeated_number = 0;
int a = i, b = j;
for (int k = 0; k < 5; k++)
{
// counting number of repeated numbers
for (int l = 0; l < 5; l++)
{
if (n[a, k] == n[b, l])
{
no_of_repeated_number++;
}
}
int[] repeated_number_set = new int[no_of_repeated_number];
int count = 0;
// putting the repeated numbers value into array
for (int k = 0; k < 5; k++)
{
for (int l = 0; l < 5; l++)
{
if (n[a, k] == n[b, l])
{
repeated_number_set[count] = n[a,k];
count++;
}
}
}
// create objects to store the infomation
S[no_of_repeated_number, init[no_of_repeated_number]] = new RepeatedSet(a,b,repeated_number_set,repeated_number_set.Length);
init[no_of_repeated_number]++;
}
}
{

重复集类:

class RepeatedSet
{
int combinationA = 0; // sequence no. of combination A
int combinationB = 0; // sequence no. of combination B
int[] repeat = new int[0];

public RepeatedSet(int a, int b, int[] r, int size)
{
combinationA = a;
combinationB = b;
repeat = new int[size];
repeat = r;
}

public int getcombinationA()
{
return this.combinationA;
}

public int getcombinationB()
{
return this.combinationB;
}

public int[] getRepeatedSet()
{
return this.repeat;
}

我的问题:有没有更好的方法可以在不进行比较密集操作的情况下完成任务?

最佳答案

解决问题的最佳方法是使用字典,键是五个一组中的数字,值是这些组中值出现的次数(假设每个数字在一组中最多出现一次)五)。

遍历Dictionary的key,可以轻松判断是否

  • 一个数字在所有五组中都是唯一的:重复计数等于 1
  • 一个数字出现在所有五组中:重复计数等于组数
  • 一个数字出现不止一次,但不是在所有集合中出现

稍后

只有几点建议。

using System.Collections.Generic;
Dictionary<int, int> dictionary = new Dictionary<int, int>();

计算另一个数字:

int count;
if (dictionary.TryGetValue(number, out count)){
dictionary[number] = count + 1;
} else {
dictionary[number] = 1;
}

调查结果

foreach (KeyValuePair<int, int> pair in dictionary){
int number = pair.Key;
int count = pair.Value;
...
}

关于c# - 不同数字的组合及其关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24154857/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com