當前位置:首頁 » 編程軟體 » 編程題翻硬幣

編程題翻硬幣

發布時間: 2022-05-16 00:29:51

❶ C++編程 翻硬幣

這題顯然在線不可做,我們考慮離線,將所有操作保存下來,並且差分,把一次[l,r]取反變成兩次[0,l-1]和[0,r]取反,記錄在數組里,因為取兩次反和不取反是一樣的,且取反先後順序沒有影響,這樣我們從0開始往後掃,掃到一個端點時,如果它之後(包括它自己)有偶數次操作,continue,否則將它和上一端點之間的位置取反。每個位置只會被取反一次所以是O(n)的

java編程 翻硬幣問題

public class A {
public static void main(String[] args) {
int j=0;
int n=0;
while(true)
{
for(int i=0;i<6;i++)
{
int r = (int) (Math.random()*1000%2);
if(r==0)j+=1;
String s = r==0?"正面 ":"反面 ";
System.out.print(s);
}
if(j==3){System.out.println("第"+n+"次出現了三個正面和三個反面");break;}
else{
j=0;
n+=1;
System.out.println();
}
}
}
}

❸ 有誰能給我今年的NOIP分區聯賽的題目

第八屆全國青少年信息學奧林匹克聯賽(NOIP2002)試題
(普及組PASCAL語言二小時完成)
全部試題答案均要求寫在答卷紙上,寫在試卷紙上一律無效

一.選擇一個正確答案代碼(A/B/C/D,填入每題的括弧內(每題1.5分,多選無分,共30分)
1)微型計算機的問世是由於( ) 的出現。
A) 中小規模集成電路 B) 晶體管電路 C) (超)大規模集成電路 D) 電子管電路
2)下列說法中正確的是( ) 。
A) 計算機體積越大,其功能就越強
B) CPU的主頻越高,其運行速度越快
C) 兩個顯示器屏幕大小相同,則它們的解析度必定相同
D)點陣列印機的針數越多,則能列印的漢字字體越多
3)Windows98中,通過查找命令查找文件時,若輸入F*.? , 則下列文件( ) 可以被查到。
A) F.BAS B) FABC.BAS C) F.C D) EF.
4)CPU處理數據的基本單位是字,一個字的字長( ) 。
A) 為8個二進制位 B) 為16個二進制位
C) 為32個二進制位 D) 與晶元的型號有關
5)資源管理器的目錄前圖標中增加"+"號,這個符號的意思是( ) 。
A) 該目錄下的子目錄已經展開 B) 該目錄下還有子目錄未展開
C) 該目錄下沒有子目錄 D) 該目錄為空目錄,
6)下列哪一種程序設計語言是解釋執行的( ) 。
A) Pascal B) GWBASIC C) C++ D) FORTRAN
7)啟動WORD的不正確方法是( ) 。
A) 單擊Office工具欄上的Word圖標
B) 單擊"開始"→"程序"→Word
C) 單擊"開始"→"運行",並輸入Word按回車
D) 雙擊桌面上的"Word快捷圖標"
8)多媒體計算機是指( ) 計算機。
A) 專供家庭使用的 B) 裝有CDROM的
C) 連接在網路上的高級 D) 具有處理文字、圖形、聲音、影像等信息的
9)在樹型目錄結構中,不允許兩個文件名相同主要是指( ) 。
A) 同一個磁碟的不同目錄下 B) 不同磁碟的同一個目錄下
C) 不同磁碟的不同目錄下、 D) 同一個磁碟的同一個目錄下
10)用畫筆(Paintbrush)繪制圖形並存儲在文件中,該圖形文件的文件名預設的後綴為( ) 。
A) .jpg B) .bmp C) .gif D).tiff
t11)E-ml地址中用戶名和郵件所在伺服器名之間的分隔符號是( ) 。
E A) # B) @ C) & D) $
12)(0.5)10=( ) 16.
A) 0.1 B) 0.75 C) 0.8 D) 0.25
13)IP v4地址是由( ) 位二進制數碼表示的。
A) 16 B) 32 c) 24 D) 8
14)算式(2047)10一(3FF)16+(2000)8的結果是( ) 。
A) (2048)10 B) (2049)10 C) (3746)8 D) (1AF7)16
15)下列敘述中,錯誤的是( )
A) Excel中編輯的表格可以在Word中使用
B) 用Word編輯的文本可以存成純文本文件
C) 用記事本(Notepa D) 編輯文本時可以插入圖片
D) 用畫筆(Paintbrush)繪圖時可以輸入文字
16)一個向量第一個元素的存儲地址是100,每個元素的長度是2,則第5個元素的地址是( )
A) 110 B) 108 C) 100 D) 109
17)在所有排序方法中,關鍵字比較的次數與記錄的初始排列次序無關的是( ) 。
A) 希爾排序 B) 起泡排序 C) 插入排序 D) 選擇排序
18)在計算機網路中,Modem的功能是( )
A) 將模擬信號轉換為數字信號 B) 將數字信號轉換為模擬信號
C) 實現模擬信號與數字信號的相互轉換 D) 實現將模擬信號的數字信號
19)設有一個含有13個元素的Hash表(O~12),Hash函數是:H(key)=key % 13,其中%是求余數運算。用線性探查法解決沖突,則對於序列(2、8、31、20、19、18、53、27),18應放在第幾號格中( ) 。
A) 5 B) 9 C) 4 D) 0
20)要使1…8號格子的訪問順序為:82、63、73、1、4,則下圖中的空格中應填人( ) 。
1 2 3 4 5 6 7 8
4 6 1 -1 7 3 2
A) 6 B) O C) 5 D) 3

二.問題求解:
1. 如下圖,有一個無窮大的的棧S,在棧的右邊排列著1,2,3,4,5共五個車廂。其中每個車廂可以向左行走,也可以進入棧S讓後面的車廂通過。現已知第一個到達出口的是3號車廂,請寫出所有可能的到達出口的車廂排列總數(不必給出每種排列)。
出口← ← 1 2 3 4 5
S↓

2.將N個紅球和M個黃球排成一行。例如:N=2,M=3可得到以下6種排法:
紅紅黃黃黃 紅黃紅黃黃 紅黃黃紅黃 黃紅紅黃黃 黃紅黃紅黃 黃黃黃紅紅
問題:當N=4,M=3時有多少種不同排法?(不用列出每種排法)

三.閱讀程序:
program exp1;
var i,j,k,n,,L0,L1,LK:Integer;
a :array [0..20] of integer;
begin
readln(n,k);
for i:=0 to n-1 do a[i]:=i+1;
a[n]:=a[n-1];L0:=n-1; Lk:=n-1;
for I:=1 to n-1 do
begin
L1:=L0-k; if (l1<0) then L1:=L1+n;
If (l1=Lk) then begin
A[L0]:=a[n]; Lk:=Lk-1; a[n]:=a[Lk]; l0:=lk
End;
Else
Begin
A[l0]:=a[l1];l0:=l1;
End;
End;
A[L0]:=a[n];
For I:=0 to n-1 do write(a[I]:40;
Writeln;
End.
輸入:10 4
輸出:

2)program exp2;
var n,jr,jw,jb:integer;
ch1:char;
ch:array[1..20]d char;
begin
readln(n);
for i:=1 to n do read(ch[i]):
jr:=1;jwz=n;jb:=n;:
while (jr<=jw)do
begin
if(ch[jw]='R')
then begin
ch1:=Ch[jr];Ch[jr]:=ch[jw];ch[jw]:=ch1:jr:=jr+13
end
else if ch[jw]='W'
then jw:=jw-1
else begin
ch1:=ch[jw];ch[jw]:=ch[jb];ch[jb]:=ch1;jw:=jw-1;jb:=jb-1;
end
end;
for i:=1 to n do write(ch[i]);
writeln;
end.
輸入:10
RBRBWWRBBR
輸出:

3)Pmgram exp3;
Var I,j,p,n,q,s:integer;
a :array[1..20]of integer;
begin
readln(p,n,q);j :=21;
while (n>0)do
begin
j:=j-1;a[j]:=n mod 10;n:=n div 10;
end;
s:=0;
for i:=j t0 20 do s:=s*p+a[i];
writeln(s);j :=21;
while (s>O)do
begin j:=j-1;a[j]:=s mod q;s:=s div q;end;
for i:=j to 20 do write(a[i]);readln;
end.
輸入:7 3051 8
輸出:

四.完善程序:
1.問題描述:將n個整數分成k組(k≤n,要求每組不能為空),顯然這k個部分均可得到一個各自的和s1,s2,……sk,定義整數P為:
P=(S1-S2)2+(S1一S3)2+……+(S1-Sk)2+(s2-s3)2+……+(Sk-1-Sk)2
問題求解:求出一種分法,使P為最小(若有多種方案僅記一種〉
程序說明:
數組:a[1],a[2],...A[N]存放原數
s[1],s[2],...,s[K]存放每個部分的和
b[1],b[2],...,b[N]窮舉用臨時空間
d[1],d[2],...,d[N]存放最佳方案
程序:
program exp4;
Var i,j,n,k : integer;
a :array [1..100] of integer;
b,d:array [0..100] of integer;
s :array[1..30] of integer;
begin
readln(n,k);
for I:=1 to n do read(a[I]);
for I:=0 to n do b[I]:=1;
cmin:=1000000;
while (b[0]=1) do
begin
for I:=1 to k do ①
for I:=1 to n do

sum:=0;
for I:=1 to k-1 do
for j:= ③
sum:=sum+(s[I]-s[j])*(s[I]-s[j]);
if ④ then
begin
cmin:=sum;
for I:=1 to n do d[I]:=b[I];
end;
j:=n;
while ⑤ do j:=j-1;
b[j]:=b[j]+1;
for I:=j+1 to n do ⑥
end;
writeln(cmin);
for I:=1 to n do write(d[I]:40);
writeln;
end.
2. 問題描述:工廠在每天的生產中,需要一定數量的零件,同時也可以知道每天生產一個零件的生產單價。在N天的生產中,當天生產的零件可以滿足當天的需要,若當天用不完,可以放到下一天去使用,但要收取每個零件的保管費,不同的天收取的費用也不相同。
問題求解:求得一個N天的生產計劃(即N天中每天應生產零件個數),使總的費用最少。
輸入:N(天數N<=29)
每天的需求量(N個整數)
每天生產零件的單價(N個整數)
每天保管零件的單價(N個整數)
輸出:每天的生產零件個數(N個整數)
例如:當N=3時,其需要量與費用如下:
第一天 第二天 第三天
需要量 25 15 30
生產單價 20 30 32
保管單價 5 l0 0
生產計劃的安排可以有許多方案,如下面的三種:
第一天 第二天 第三天 總的費用
25 15 30 25*2O+15*30+30*32=1910
40 0 30 40*20+15*5+30*32=1835
70 0 0 70*20+45*5+30*10=1925
程序說明:
b[n]:存放每天的需求量
c[n]:每天生產零件的單價
d[n]:每天保管零件的單價
e[n]:生產計劃
程序:
Program exp5;
Var
i,j,n,yu,j0,j1,s:integer;
b,c,d,e: array[0..30]of integer; begin
readln(n);
for i:=1 to n do readln(b[[i],c[I],d[i]];
fori:=1 to n do e[i]:=0;
① :=10000;c[n+2]:=0;b[n+1]:=0;jO:=1;
while (jO<=n)do
begin
yu:=c[j0]; j1:=jO; s:=b[j0];
while ② do
begin
③ j1:=j1+1;s:=s+b[j1];
end;
④ jO:=j1+1;
end;
for i:=1 to n do ⑤
readln;
end.

❹ 翻硬幣問題分析

我們把每一次的翻轉稱為一次「小翻轉」,從頂上開始連續翻n次稱為
一次「大翻轉」。最後翻到全是正面朝上的狀態時,如果用了 a 次大翻轉和 b 次小翻轉,那麼總的翻轉次數是 a*n + b。研究一次大翻轉的置換結構。自底向上(為方便我們實際上用自左向右),用 1, 2, 3, ..., n 標記 n 個硬幣,用 a' 表示硬幣 a 的反面朝上狀態。我們還在這一摞硬幣的右端放一面鏡子,那麼,初始狀態是:('|' 表示鏡子的位置)
[1 2 3 4 ... n-1 n | n' (n-1)' ... 4' 3' 2' 1']
經過一次大翻轉後,成為:
[2 4 6 ... 5' 3' 1' | 1 3 5 ... 6' 4' 2']
這個變換很有規律。只要令 a'=-a,可以看出,一次大翻轉就是把編號
為 c 的硬幣變換到 c/2 (mod 2n+1) 的位置。看其逆變緩將更明顯。
顯然,如果 2^m=1 (mod 2n+1),那麼經過 m 次大翻轉後,所有硬幣都
歸到原位而且面朝上。此時共用了 m*n 次小翻轉。
顯然,如果 2^m=-1 (mod 2n+1),那麼經過 m 次大翻轉後,所有硬幣
都將歸到原位,並且正面朝下。如果不做最後那個大翻轉的最後那個n
個硬幣翻過來的小翻轉,那麼就能得到正面全朝下的狀態,此時需要
m*n-1 次小翻轉。剩下的問題是,證明只有上面所述兩種情況下才會出現正面全朝上的局面。需要證明幾個事實:
1) 進行任意次大翻轉後,再進行 0 < b < n-1 次小翻轉,那麼不可
能出現全部硬幣正面朝上的局面。
(即要出現正面全朝上的情況,必然有 b=0 或 b=n-1.)
2) 如果經過 m 次大翻轉後全部硬幣正面朝上,那麼確實每個硬幣都
回到了原來的位置。
3) 如果經過 m 次大翻轉後全部硬幣正面朝下,那麼確實每個硬幣都
回到了原來的位置。
2) 與 3) 比較容易證明,證法也類似。1) 證起來麻煩一些。當然可以用數學歸納法來證明。
這個就是這個程序的思路,有了思路,我想你這個T和D應該就知道是什麼意思了吧?陳晨!

c語言,編寫模擬翻硬幣得程序。

#include<stdio.h>

int main(void)

{

int n;//讀入一個數,為結束的次數

int i;

int a[10];//10個硬幣

int biaoji = 0;//當這個標記能被3或7整除,說明恰好數了3次或7次

scanf("%d", &n);

for (i = 0; i < 10; i++) //將硬幣都初始化為正面的狀態,即1

a[i] = 1;

biaoji = 1;//因為a[]的下標不允許超過9,故要重置

a[biaoji - 1] = !a[biaoji - 1];//改變硬幣的狀態

for (i = 0; i < 10; i++)

printf("%d", a[i]);

return 0;

}

主要特點

C語言是一種結構化語言,它有著清晰的層次,可按照模塊的方式對程序進行編寫,十分有利於程序的調試,且c語言的處理和表現能力都非常的強大,依靠非常全面的運算符和多樣的數據類型,可以輕易完成各種數據結構的構建,通過指針類型更可對內存直接定址以及對硬體進行直接操作,因此既能夠用於開發系統程序,也可用於開發應用軟體。

❻ 矩陣翻硬幣Java編程問題

package;

importjava.util.Arrays;

/**
*標題:矩陣翻硬幣<br>
*
*@authorYugi111
*/
publicclassQ
{
//假設0表示反面
//小明先把硬幣擺成了一個n行m列的矩陣。
int[][]qArray={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};

/**
*隨後,小明對「每一個」硬幣分別進行"一次"Q操作。<br>
*對第x行第y列的硬幣進行Q操作的定義:將所有第i*x行,第j*y列的硬幣進行翻轉。
*/
privatevoidqTurn()
{
//其中i和j為任意使操作可行的正整數>0,行號和列號都是從1開始。
for(intx=1;x<qArray.length;x++)
{
for(inty=1;y<qArray[x].length;y++)
{
for(inti=1;i<qArray.length/x;i++)
{
for(intj=1;j<qArray[x].length/y;j++)
{
//對「每一個」硬幣分別進行"一次"Q操作
qArray[i*x][j*y]=qArray[i*x][j*y]==0?1:0;
}
}
}
}
}

publicstaticvoidmain(String[]args)
{
Qq=newQ();
q.qTurn();
for(inti=0;i<q.qArray.length;i++)
{
System.out.println(Arrays.toString(q.qArray[i]));
}
System.out.println("當小明對所有硬幣都進行了一次Q操作後,他發現了一個奇跡——所有硬幣均為正面朝上。");
System.out.println("小明想知道最開始有多少枚硬幣是反面朝上的。"+"於是,他向他的好朋友小M尋求幫助。 "+"聰明的小M告訴小明,只需要對所有硬幣再進行一次Q操作,"
+"即可恢復到最開始的狀態。然而小明很懶,不願意照做。"+"於是小明希望你給出他更好的方法。幫他計算出答案");
System.out.println(" 由於0表示反面,1表示正面. 所以: ");
intcount=0;
for(inti=0;i<q.qArray.length;i++)
{
for(intj=0;j<q.qArray[i].length;j++)
{
if(q.qArray[i][j]==1)
{
count++;
}
}
}
System.out.println("最開始有"+count+"枚硬幣是反面朝上的");
}
}

❼ C++編程題目 定義一個類coin 模擬翻硬幣游戲

#include <stdio.h>
class COIN
{
public:
COIN(int n1,int k1){
n = n1;
k = k1;
a = new int[n];
for(int i = 0; i < n ; i++){
a[i] = 1;
}
}
~COIN(){
delete []a;
}
void fun(){
int i = 0;
for(int j = 1 ; j <= k ;j++){
i = (j - 1) % n; //寫為 i = j%n 亦可
if( ! ( j % 3) ){
a[i] = 1 - a[i] ;
continue;
}
if( ! (j % 5)){
a[i] = 1 - a[i];
continue;
}
}
}
void print(){
int i;
for(i = 0 ; i < n - 1 ; i ++){
printf("%d ",a[i]);
}
printf("%d\n",a[i]);
}

private:
int * a;
int n;
int k;

};

int main ()
{
COIN *a = new COIN(12,100);
a->fun();
a->print();
delete a;
}

❽ pascal程序題翻硬幣

這種題沒什麼技術含量的,純粹考數學,手算就出來了.
n=6的時候:
000000 (0)
111110 (1)
100001 (2)
011100 (3)
110011 (4)
001000 (5)
111111 (6)
一共6步.
n=7的時候:
0000000 (0)
1111100 (1)
1000010 (2)
1111111 (3)
一共3步,顯然沒有更少的了.
n=8的時候:
00000000 (0)
11111000 (1)
10000100 (2)
01110000 (3)
11111111 (4)
一共4步.
當n>=9的時候:
定義f(n)為最少步數.
若n=5k,則順著翻k次即可.f(5k)=k
若n=5k+1,先討論左邊8個:
00000000
11111000
11100111
翻2次,使得8個中有6個被翻過來剩下2個,一共剩5k+1-8+2=5k-5個,再順著翻k-1次即可.所以f(5k+1)=k+1
若n=5k+2,先討論左邊6個:
000000
111110
100001
翻了2次,使得6個中有2個被翻過來,一共剩5k+2-2=5k,順著翻,所以f(5k+2)=k+2
若n=5k+3,先討論左邊9個:
000000000
111110000
111101111
翻了2次,有8個翻過來,一共剩5k+3-8=5k-5,順著翻,所以f(5k+3)=k-1+2=k+1
若n=5k+4,先討論左邊7個:
0000000
1111100
1100011
翻了2次,有4個翻過來,一共剩5k+4-4=5k個,順著翻,所以f(5k+4)=k+2

下面討論下上面的正確性:
5k個至少要翻k次,這是顯然的.5k+1,5k+2,5k+3,5k+4分別至少要翻k+1次,也是顯然的.
所以f(5k)>=k, f(5k+1)>=k+1, f(5k+2)>=k+1, f(5k+3)>=k+1, f(5k+4)>=k+1
由於最終所有的硬幣都要被翻過來,所以每個硬幣都必須被翻奇數次.
不妨設第k個硬幣被翻ak次.
f(n) = a1+a2+...+an ≡ 1+1+...+1(n個1) ≡ n(mod 2) {同餘,也就是同奇偶}
所以f(5k+2)與5k+2同奇偶,但是k+1與5k+2不可能同奇偶,所以f(5k+2)>=k+2.
同理,f(5k+4)與5k+4同奇偶,但5k+4與k+1不可能同奇偶,所以f(5k+2)>=k+2.
綜上,可知討論出的最小值正確.
var n: longint;
begin
readln(n);
if n = 6 then begin writeln(6); exit; end;
if n = 7 then begin writeln(3); exit; end;
if n = 8 then begin writeln(4); exit; end;
if n mod 5 = 0 then begin writeln(n div 5); exit; end;
if n mod 5 = 1 then begin writeln(n div 5 + 1); exit; end;
if n mod 5 = 2 then begin writeln(n div 5 + 2); exit; end;
if n mod 5 = 3 then begin writeln(n div 5 + 1); exit; end;
if n mod 5 = 4 then begin writeln(n div 5 + 2); exit; end;
end.

❾ 高手幫忙一道c++排序編程題(請演算法簡明清晰,我用MinGW編譯

#include<stdio.h>
main()
int a=0,b=1;
{

}

❿ 解釋下fillchar(a,sizeof(a),false)

fillchar
Pascal(一種同C語言的編程語言)的一個函數。
C語言 網路內容來自於: C語言Combined Language(組合語言)的中英混合簡稱是一種計算機程序設計語言。它既有高級語言的特點,又具有匯編語言的特點。它可以作為系統設計語言,編寫工作系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬體的應用程序。C語言對操作系統和系統使用程序以及需要對硬體進行操作的場合,用C語言明顯優於其它解釋型高級語言,有一些大型應用軟體也是用C語言編寫的。

c語言C語言是一種計算機程序設計語言。它既有高級語言的特點,又具有匯編語言的特點。它可以作為系統設計語言,編寫工作系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬體的應用程序。因此,它的應用范圍廣泛。

熱點內容
編譯翻譯的區別 發布:2024-04-20 14:55:53 瀏覽:893
登錄之後qq密碼要在哪裡看 發布:2024-04-20 14:55:03 瀏覽:730
天龍多開腳本 發布:2024-04-20 14:53:05 瀏覽:770
同一段代碼編譯的長度不同 發布:2024-04-20 14:24:14 瀏覽:379
緩存美劇權力的游戲 發布:2024-04-20 14:16:52 瀏覽:987
如何刪除word文件保存密碼 發布:2024-04-20 14:15:18 瀏覽:824
紅米安卓10如何降級到安卓9 發布:2024-04-20 14:13:25 瀏覽:30
ftp目錄遍歷 發布:2024-04-20 13:58:37 瀏覽:970
mysql存儲過程的數組 發布:2024-04-20 13:58:33 瀏覽:60
怎麼樣更改無線網密碼 發布:2024-04-20 13:53:23 瀏覽:883