自习室的泡利不相容定律(C语言实现)
生活随笔
收集整理的這篇文章主要介紹了
自习室的泡利不相容定律(C语言实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
自習室的泡利不相容定律(C語言實現)
描述:假設自習室只有一排n個靠窗座位,而在人數不多的時候同學們會盡可能遠離其他人就座避免尷尬,確保自己的學習效率。若要讓人數不會達到尷尬條件,以7個座位為例,兩個同學占據第一個和最后一個座位,第三位同學占據4號座位,此時人數已達到飽和,新來的同學無論坐在2356哪個位置都會與至少一人相鄰,所以7個座位只能讓3個同學坐。現輸入座位個數n,編程輸出這間自習室的坑位利用率(飽和人數/座位數),保留兩位小數,第三位四舍五入。
輸入:
輸入一個正整數n(1<=n<=10000)
輸出:
輸出坑位利用率,保留兩位小數,第三位四舍五入。
輸入樣例 1: 5
輸出樣例 1:60.00%
思路:本題用C語言來實現。用到函數遞歸的思想。首先定義一個函數f(n),功能是求出x個座位下按題目要求最多能坐的人數。很明顯n<=4的時候只能做頭尾兩邊,并且滿足f(1)=1,f(2)=1,f(3)=2,f(4)=2。那么當n>=5的時候,就要尋找他們的關系了。f(n)能否看成兩個更小的數x,y的f(x),f(y)的某種關系呢?仔細分析,將f(7)第三個人坐的位置可以看做兩個f(4)的某種關系,將f(8)從第三個人坐的位置可以看做f(4)和f(5)的某種關系。多列舉幾項,就找到規律:n為奇數時,對應的兩個更小的數都是(n/2+1)1;n為偶數時對應的兩個更小的數是n/2和n/2+1;由于拆分時中間的位置被算了2次,因此最后返回的值要減去1。
#include <stdio.h> int main() {int f(int x);//求x個座位最多坐的人數int x;double rate;scanf("%d",&x);rate=(double)(f(x)*100)/(double)(x);printf("%.2f%%",rate); }int f(int x) {if(x==1||x==2)return 1;if(x==3||x==4)return 2;if(x>=5){if(x%2==0)return f(x/2)+f(x/2+1)-1;elseif(x%2==1)return f(x/2+1)*2-1;} }c語言存在隱式轉換。
f(n)={f(n/2)+f(n/2+1)?1n是偶數f(n/2+1)+f(n/2+1)?1n是奇數f(n)=\begin{cases} f(n/2)+f(n/2+1)-1 & n是偶數 \\ f(n/2+1)+f(n/2+1)-1 & n是奇數 \\ \end{cases} f(n)={f(n/2)+f(n/2+1)?1f(n/2+1)+f(n/2+1)?1?n是偶數n是奇數? ??
總結
以上是生活随笔為你收集整理的自习室的泡利不相容定律(C语言实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 刘墉:写给女儿的旅行百忌
- 下一篇: 微信小程序上拉刷新下拉加载