Madinah |

Rust algorithm

Date: Oct 24, 2024 Thu
|
Estimated Reading Time: 1 min
|
Author: Madinah

寻找独特数字卡片

在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小 C 快速找到那个拿了独特数字卡片的同学手上的数字是什么

 fn solution(inp: Vec<i32>) -> i32 {
    let mut result = 0;
    for i in inp.iter() {
        result = result ^ i;
    }
    result
} 

数字分组求偶数和

小 M 面对一组从 1 到 9 的数字,这些数字被分成多个小组,并从每个小组中选择一个数字组成一个新的数。目标是使得这个新数的各位数字之和为偶数。任务是计算出有多少种不同的分组和选择方法可以达到这一目标。 numbers: 一个由多个整数字符串组成的列表,每个字符串可以视为一个数字组。小 M 需要从每个数字组中选择一个数字。 例如对于[123, 456, 789],14 个符合条件的数为:147 149 158 167 169 248 257 259 268 347 349 358 367 369

 fn solution(numbers: &[i32]) -> i32 {
  let mut groups = Vec::new();
  for num in numbers.iter() {
      let chats_arr: Vec<i32> = num
          .to_string()
          .chars()
          .map(|c| c.to_digit(10).unwrap() as i32)
          .collect::<Vec<i32>>();
      groups.push(chats_arr);
  }

  fn calc_nums(group: &Vec<Vec<i32>>, index: usize, current_sum: i32, count: &mut i32) {
      if index == group.len() {
          if current_sum % 2 == 0 {
              *count = *count + 1;
          }
          return;
      }
      for &num in group[index].iter() {
          calc_nums(group, index + 1, num + current_sum, count);
      }
  }

  let mut count = 0;
  calc_nums(&mut groups, 0, 0, &mut count);

  return count;
} 

This work is licensed under CC BY-NC-SA 4.0