1樓:匿名使用者
var a,b,c:integer; d:boolean;
begind:=true;
while d=true do
beginreadomize;
a:=random(10);
b:random(10);
c:=a+b;
if c=18 then d:=false;
writeln(a,'+b,'=c);
end;end.
有必要註明一下:random(n)可能產生的是0到n-1的整數,random拼寫注意一下。
if c=18 then 退出迴圈,你的程式是d=false退出,所以應該改d:=false(有冒號啊),另外,給d附初值true是一個程式設計需要的習慣,不然可能造成錯誤(尤其是學了過程函式以後)
這樣就好了。如果想看概率,可以外面套個迴圈,裡面記錄每次長度,最後求平均長度。用數學也能求,列舉就可以。
2樓:匿名使用者
你第一個程式變數的型別搞渾了,c不可以既是布林型又是整數型所以肯定不行。
第二個程式,你在滿足d為true即c不等於18的時候執行以下程式,那麼,下面「if c=18 then」後面應寫「d=false」,這樣才可以跳出迴圈,不然,你的程式實際上無論如何都是在死迴圈。
3樓:匿名使用者
樓上的人們,初始化隨機數生成器什麼時候成了 readomize?
var a,b,c:integer; d:boolean;
beginwhile d=true do
beginrandomize;
a:=random(10);
b:random(10);
c:=a+b;
if c=18 then d:=false;
writeln('=c);
end;end.
想看隨機2個數字相加=18的幾率有多大(a為10以內的隨機整數 b為10以內的隨機整數):
program asdf;
var a,b,c,d:integer;
e:real;
beginc:=0;
for a:=1 to 10 do
for b:=1 to 10 do
beginc:=c+1;
if (a+b=18) then d:=d+1;
end;e:=d/c;
writeln(e);
end.
4樓:上官通
vara,b,c:longint;
beginrepeat
randomize;
a:=trunc(random*11);
b:=trunc(random*11);
c:=a+b;
writeln(a,'+b,'=c);
until c=18;
end. 你的c變數不可能一會兒是boolean,一會兒是longint
pascal問題
5樓:網友
原本有8x+1個蘋果 第一個人拿了x+1個(x>=1)所以不超過8個人,即最後一個人拿的蘋果數不超過8蘋果總數不超過64個。
給你個框架:
while p>0 do
begininc(t);p:=p-t;
if (p<0) or (p mod 8<>0) then begin f:=false;break;end;
a[t]:=t+p div 8;
if (t>1) and (a[t-1]<>a[t]) then begin f:=false;break;end;
end;if f then break;
陣列別太大,給你個思路了,要所有**告訴我你的郵箱,給你發,不過要得獎還是自己做吧。
6樓:水藍希凌
用簡單的數學方法推了一下。
設蘋果總數為n個。
第一個人拿了 a1=1+1/8(n-1)
第二個人拿了 a2=2+1/8(n-a1)=2+1/8(7/8*n-23/8)
因為a1=a2
所以直接解兩個式子,得出的結果是n=49
驗證了一下,有7個人可以拿到蘋果,每個人拿7個排布就是。
7+0 (最後一個人拿了七個蘋果,籃子裡面就一個都沒有了)呃,我的結果就是這樣。
有什麼問題 再提好了。
pascal問題,能解答麼?
7樓:匿名使用者
本題需要一定的抽象思維能力,是2023年noip提高組(即高中組)的第一題改編版。思路:
本題可以用類似貪心的思路得到。比如說如果我們按照第一列開始塗,那麼顯然我們必須要塗第一列高度次才可以塗完。然後我們再來看第二列。
如果第二列沒有第一列高(或一樣高),那麼第一列顯然可以在塗的過程中順便把第二列也給塗完。如果第二列比第一列高呢?那麼我們塗完第一列後,首先把第二列中和第一列相同高度的部分也給塗完。
推及到每一列,假設第i列比第i-1列高或一樣(如圖1-2):那麼在塗第i列的時候,可以在塗a高度時把i+1列也給塗完;假設第i列比第i+1列低,那麼在塗完a高度時,還需要再塗b-a高度才可以把第i+1列塗完。
那麼對於三列或者更多的情況呢?其實也是一樣的,我們仍然一列列看。假設為i,i+1,i+2列時,那麼仍然是現將第i列塗滿,再塗第i+1列沒有塗完的部分(如果需要的話),那麼,對於第i+2列,我們可以將第i列中移到第i+1列的噴塗機器再增加一個寬,順便塗完。
詳情請看程式:
vari,n,x,y,ans:longint;
beginreadln(n);
for i:=1 to n do
beginread(x); if x>y then ans:=ans+x-y; y:=x;//這是核心。
如果後一列沒有前一列高,就說明可以直接塗滿。否則,塗上前一列沒有塗到的地方,也就是高的地方。
end;writeln(ans):
end.
pascal問題求**
pascal求解
8樓:市守沐
最直接的思路:
設二維布林陣列,將該圓走過的路徑掃描一遍(要用到圓的方程),經過的格子標記,並記錄走過的格子數(紅色)。
然後將紅色格子圍著的格子(藍色)寬搜,統計個數。
pascal問題:完善程式
9樓:匿名使用者
首先先理解一下這個程式:
checkchangerule這個程式的作用是將change陣列裡所有的字母都統一為小寫字母,便於操作。
changesting這個程式當然就是按照change陣列對str(原串)進行改變。對於每個字母,都有兩種操作:
1、這個字母是大寫字母時,將這個字母改為change陣列裡的字母(此時change陣列裡都是小寫)的大寫【upcase】。
2、這個字母是小寫字母時,將這個直接改為change陣列裡相對應的字母(已經同樣是小寫,無需在操作)
現在明白了程式的內容,答案具體見下= =
①是判斷change[i]是否是大寫字母(是就替換為小寫字母【統一,便於操作】)於是有這兩種寫法:1、change[i] in ['a'..z'] 或者 2、(change[i]>=a')and(change[i]<=z') 任選其一。
②是判斷str[i]是否是大寫字母,基本同上 兩種:1、str[i] in ['a'..z'] 或者 2、(str[i]>=a')and(str[i]<=z') 任選其一。
④【不明白咋就木有③勒】就是對str[i]是小寫字母時進行的操作【見上程式分析】直接替換:str[i]:=change[ord(str[i])-a'+1];
⑤就簡單了把。。。總共就兩個過程 其中一個過程裡也沒有呼叫另個過程的語句= =所以在這肯定要用到【不然第二個過程就沒用了= =so。。。果斷changestring;
--end--
10樓:匿名使用者
這題本身很水的說……
題目大意一樓已經給的很清楚了,不再贅述。
以後的程式填空都用這種方法做,最好再用幾個資料代入試一下,可以保證ac
11樓:匿名使用者
一樓已解釋十分清楚,此題實在很水。
pascal程式問題,Pascal程式問題
5.var a array 1.32767 of boolean b array 1.40 of integer i,s,t integer begin for i 1 to 32767 do a i false write 1 8,2 8 a 1 true b 1 1 b 2 2 s 2 repe...
PASCAL程式設計問題,PASCAL程式設計問題
我剛剛自己編的 試過了 肯定對 程式中公雞數量為a 母雞數量為b 小雞數量為c 輸出順序為 a1 b1 c1 a2 b2 c2 如下 for迴圈 vara,b,c integer begin for a 1 to 100 div 3 do for b 1 to 100 a div 2 do begi...
pascal迴圈問題
百錢買百雞.這是一人經典的程式迴圈程式 首先是a,b,c三個資料.分別代表公雞,母雞和小雞的數量 然後是a 0 b 0 初始值 while a 100 div 3 do 這是第一層外迴圈 公雞的迴圈 公雞a值3錢.一共100錢.所以公雞a的數量 100 3的值 a a 1 b 0 在公雞的迴圈裡每次...