---
# System prepended metadata

title: 數學專題進度報告
tags: [' hackmd', markdown]

---

---
title: 數學專題進度報告
tags: markdown, hackmd
slideOptions:
    theme: night
    transition: slide
   
---

# 數學專題進度報告


---

## 鄰居數

* 命題緣起
* 名詞定義

----

## 原題目敘述


* 兩個十位數如果恰好只有某一位數的數字不相同,則稱這二個數互為“鄰居數”

* 例如:1234567890,1234507890 就是二個“鄰居數”。請問至多可寫下多少個十位數,使得這些數中的任二個數都互不為“鄰居數”?



----

## 名詞定義


* 我們將此命題定義為 **n位k階**


    * n代表它是一個n位數
    * k代表他洽有k個位數不同



---

## 討論 **n位1階**


* 皆為10個

---

## 討論 非**n位1階**

----

### 解題想法

* 提出一構造解答方法 

* 證明構造方法之正確性 

* 上界證明

----

### 構造方法

![](https://i.imgur.com/wu4UPtl.png)


----

### 構造方法證明

![](https://i.imgur.com/SaFqbd3.png)


----

### 上界證明

![](https://i.imgur.com/1CFL6pk.png)


---

## 討論 **非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;
}
```












