#includestdio.h
創(chuàng)新互聯(lián)建站專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、西夏網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5技術(shù)、商城網(wǎng)站開發(fā)、集團公司官網(wǎng)建設、外貿(mào)網(wǎng)站建設、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為西夏等各大城市提供網(wǎng)站開發(fā)制作服務。
#define MAX 10000
char flags[MAX];
int main(){
int i,j,n,c;
while(scanf("%d",n)!=EOFn0n=MAXn%2==0){
for(i=0;in;i++){ flags[i] =0; printf("*");}
printf("\n");
for(i=0;in;i++){
for(j=0;jn;j++){
if(j!=i) flags[j] ^= 1;
printf(flags[j]?"0":"*");
}
printf("\n");
}
printf("Total :%d\n",n);
}
return 0;
}
應該是這個意思吧 不知道對不對 你看看吧
#includestdio.h
int main(void)
{
int n;//讀入一個數(shù),為結(jié)束的次數(shù)
int i;
int a[10];//10個硬幣
int biaoji = 0;//當這個標記能被3或7整除,說明恰好數(shù)了3次或7次
scanf("%d", n);
for (i = 0; i 10; i++) //將硬幣都初始化為正面的狀態(tài),即1
a[i] = 1;
biaoji = 1;//因為a[]的下標不允許超過9,故要重置
a[biaoji - 1] = !a[biaoji - 1];//改變硬幣的狀態(tài)
for (i = 0; i 10; i++)
printf("%d", a[i]);
return 0;
}
主要特點
C語言是一種結(jié)構(gòu)化語言,它有著清晰的層次,可按照模塊的方式對程序進行編寫,十分有利于程序的調(diào)試,且c語言的處理和表現(xiàn)能力都非常的強大,依靠非常全面的運算符和多樣的數(shù)據(jù)類型,可以輕易完成各種數(shù)據(jù)結(jié)構(gòu)的構(gòu)建,通過指針類型更可對內(nèi)存直接尋址以及對硬件進行直接操作,因此既能夠用于開發(fā)系統(tǒng)程序,也可用于開發(fā)應用軟件。
把硬幣擺成一個圈就好搞 邏輯就清楚了 下面代碼可以求出到底要多少次 ?代碼沒優(yōu)化 N5不一定會精確..
#includeiostream
using?namespace?std;
const?int?maxNum=10000;//設置個最大值?
const?int?reverseNum=5;//一次翻轉(zhuǎn)幾個?
int?main()
{
int?n;//就是N?不要超過10000?
bool?m[maxNum]={0};//模擬硬幣的布爾數(shù)組?值為true就是正面?
cinn;//輸入N的值?
for(int?i=0;in;m[i++]=true);//初始化前N個硬幣為正面?
int?num=0,index=0,x=0;
//num是用來記錄前N個硬幣為反面的硬幣數(shù)?也就是false的值?開始設置為0??因為前N個硬幣都是正
//index是翻轉(zhuǎn)的頭下標?從第幾個硬幣開始翻由index決定
//x記錄翻轉(zhuǎn)次數(shù)?翻一次x+1?
while(n!=num)//當記錄為反的硬幣不為N的時候就繼續(xù)翻?
{
int?i=reverseNum;
while(i--)//用i記錄翻轉(zhuǎn)次數(shù)?翻5次?
{
m[index]=!m[index];//翻?
if(m[index])//翻完了是正面?
--num;//就要扣掉
else
++num;//不是正就加上
index=index==n-1?0:index+1;//越界了就mod一下?
}
++x;//每個大循環(huán)計數(shù)一次?
}
coutxendl;//輸出次數(shù)
return?0;
}
A數(shù)組用來存放硬幣,數(shù)值1代表正面,0代表反面;
static int s;s是存放每列狀態(tài)的數(shù)初始為0代表一列都沒翻,第幾位為1就代表第幾列被翻轉(zhuǎn)
int turncoin(A,S,N,n) //A(N*9數(shù)組) ,N是行數(shù) n代表當次翻哪一列 初次調(diào)用n=0,代表第一列
{ int i=1;//因為每列只有兩種狀態(tài),所以每列只翻一次
static int max=0;//用來存放翻轉(zhuǎn)后正面朝上的最大硬幣數(shù);
static int S;//大S用來存儲當前硬幣堆的翻轉(zhuǎn)狀態(tài)
do {turncoin(A,S,N,n+1);if (n==8){ int tem=sum //sum為遍歷A數(shù)組,所有元素之和(即為當前正面朝上的硬幣數(shù))
if(summax){S=s; //把當前翻轉(zhuǎn)狀態(tài)存儲到S,S內(nèi)總是存儲著擁有正面朝上硬幣數(shù)量最高的一種翻轉(zhuǎn)狀態(tài);}}}while(i--transform(N,n));
//transform()函數(shù)翻轉(zhuǎn)第N列的硬幣 并且對s的第n位置一 成功返回ture 并且對是 實現(xiàn)就是for(i=0;
ireturn S; //好了 這里S根據(jù)S每一位就得道最終所要求的結(jié)果}
拓展資料:
一、題目描述:
一個翻硬幣的游戲,有N(N 二、思路分析:
枚舉2^9種列的翻法。
遍歷N行,如果某行正面朝上的少,翻之;如果正面朝上的多,不翻
記下使得正面最多的方法即可
耗時O(2^9 * N)
這個得到的是最優(yōu)解.用位運算效率還是很高的.
對每一列,都用一個9位的數(shù)表示,一共有N個
然后便利所有的9位狀態(tài),(000000000)-(111111111) (二進制)
對于每個狀態(tài),都與這N個數(shù)異或,每次異或后累加所有的1的值假設為k,如果k小于5則k=9-k.
對N個數(shù)累加所有的k,得到最終累加和.
求出所有狀態(tài)下累加和最大的,就是正面朝上的硬幣盡量多的個數(shù).
翻面的方法橫列分別是最優(yōu)解的8位狀態(tài)和與之對應的每個數(shù)異或后累加和k是否小于5.
1、首先,把手指的關節(jié)按照從指尖到指根的順序記為第一指節(jié)、第二指節(jié)、第三指節(jié)。
2、然后把硬幣用大拇指夾在手心里,用大拇指的力量把硬幣推到食指第二三指節(jié)處。
3、利用大拇指的推力以及重力使硬幣平躺在食指第二三指節(jié)處,接著要注意在硬幣躺在食指上時中指要微微隆起,這樣可以阻止硬幣繼續(xù)前行以致滑落。
4、然后用剛才微微隆起的中指的第二三指節(jié)向下壓硬幣的右側(cè),使得硬幣翹起,并被夾在食指與中指之間。
5、繼續(xù)下壓中指并利用慣性使得被夾在指間的硬幣完全掉在中指上并且具有向無名指翻滾的趨勢,所以這時要注意無名指要微微隆起來阻止硬幣掉出去,并且用無名指把硬幣卡住。
6、卡住之后用無名指向下壓使得硬幣再次翹起,被夾在中指與無名指之間。
7、繼續(xù)向下壓無名指使得硬幣向右倒在無名指上,并有向小指方向滑的趨勢,所以這時要微微隆起小指,使得硬幣不致于滑出手外。
8、向下壓小指使得硬幣被夾在無名指與小指之間,這時只需要用大拇指在手掌下方把硬幣從小指與無名指的夾縫中推出來并推到食指的第二三關節(jié)上就又回到了第一步。
分享名稱:硬幣翻轉(zhuǎn)JavaScript,硬幣翻轉(zhuǎn)實驗
鏈接分享:http://sd-ha.com/article38/dsspssp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、營銷型網(wǎng)站建設、外貿(mào)網(wǎng)站建設、虛擬主機、網(wǎng)站內(nèi)鏈、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)