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?