pascal基礎問題,pascal問題

時間 2023-03-26 12:05:11

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 在公雞的迴圈裡每次...