---
title: 數學專題進度報告
tags: markdown, hackmd
slideOptions:
theme: night
transition: slide
---
# 數學專題進度報告
---
## 鄰居數
* 命題緣起
* 名詞定義
----
## 原題目敘述
* 兩個十位數如果恰好只有某一位數的數字不相同,則稱這二個數互為“鄰居數”
* 例如:1234567890,1234507890 就是二個“鄰居數”。請問至多可寫下多少個十位數,使得這些數中的任二個數都互不為“鄰居數”?
----
## 名詞定義
* 我們將此命題定義為 **n位k階**
* n代表它是一個n位數
* k代表他洽有k個位數不同
---
## 討論 **n位1階**
* 皆為10個
---
## 討論 非**n位1階**
----
### 解題想法
* 提出一構造解答方法
* 證明構造方法之正確性
* 上界證明
----
### 構造方法

----
### 構造方法證明

----
### 上界證明

---
## 討論 **非n位2階**
* 這裡的 **"2位"** 定義為洽兩個位數不相同
----
### 1位2階
* 因為少於2不討論
----
### 2位2階 -> **10個**
* 構造方法 (舉例其中一種)
*
* 10 11 12 13 14 15 16 17 18 19
---
### 3位2階-> **10個**
* 構造方法 (舉例其中一種)
* 100 101 102 103 104 105 106 107 108 109
---
## 目前遇到問題
----
### 4位2階無法證明
* 解決辦法: 目前可用程式枚舉解決
* 根據我跑了一小時1000000種可能情況下 最大值為 **105**
* 尚未看出規律 數字分散凌亂
[數字列表](https://docs.google.com/spreadsheets/d/1e76Sh50PlCQNEE9t5qCjSO7RZAomg8_ZloZfy4hZRcs/edit#gid=0)
----
### 5位2階以上構造不出來
* **數字過大程式跑不出來**
* 目前用電腦計算到之最大值為782
* 我們預期應為810
----
### 程式碼
```c++=
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
vector<string> st;
set<int> fd;
bool cal(string x,string y){
int ct=0;
for(int i=0;i<5;i++){
if(x[i]!=y[i])ct++;
}
if(ct==2)return true;
else return false;
}
int main(){
ofstream oFile;
oFile.open("scoresheet.csv", ios::out | ios::trunc);
vector<int> v;
v.clear();
for(int i=99999;i>=10000;i--){
v.push_back(i);
}
int ans=0;
for(int t=0;t<1;t++){
random_shuffle(v.begin(),v.end());
st.push_back(to_string(v[0]));
fd.insert(v[0]);
int ct=1;
for(int i=0;i<(int)v.size();i++){
bool flag=1;
if(fd.find(v[i])==fd.end()){
for(int j=0;j<st.size();j++){
if(cal(to_string(v[i]),st[j])){
flag=0;
break;
}
}
if(flag)oFile<<v[i]<<endl,fd.insert(v[i]),st.push_back(to_string(v[i])),ct++;
}
else if(fd.find(i)!=fd.end())continue;
}
ans=max(ct,ans);
cout<<"Now the answer is: "<<ct<<endl;
}
cout<<"The final answer is: "<<ans<<endl;
}
```