rust 로 dp 구현 중
콜라츠 수열 출력 txt 코드이다.
use std::fs::{OpenOptions, File};
use std::io::Write;
fn main(){
let mut file=OpenOptions::new()
.create(true)
.append(true)
.open("nums.txt")
.unwrap();
let mut cache:Vec<String>=Vec::new();
for i in 2..10000{
let road=cal(i,&mut cache);
writeln!(file, "{}",road).unwrap();
}
}
fn cal(n:u128,cache:&mut Vec<String>)->String{
let mut count:usize=0;
let mut num=n;
let mut road=String::new();
while num!=1{
if num<cache.len() as u128 && cache[num as usize]!="".to_string(){
cache.resize(num, "".to_string());
road.push_str(&cache[num as usize]);
break;
}
count=count+1;
if num%2==0{
num=num>>1;
}
else{
num=(num<<1)+num+1;
}
road.push_str(&num.to_string());
road.push(',');
}
road
}
dp구현으로 1억보다 더 큰 수까지 해보겠다.
ram의 용량이 정해져 있으므로 전부다 string 으로 캐시할 수는 없다.
구조체를 만들어서 앞에서 구한 숫자가 나오면 그 숫자 주소를 넣어서 그 주소로 이동하는 구조를 생각하고 있다.
Last updated
Was this helpful?