11.乙個字長為8位的整數的補碼是11111001,則它的原碼是
( d )。
a.00000111
b.01111001
c.11111001
d.10000111
分析:二進位制中負數才有補碼,將補碼-1再按位取反,注意第一位保留1.
佇列快照是指在某一時刻佇列中的元素組成的有序序列。例如,當元素1、2、3入隊,元素1出隊後,此刻的佇列快照是"2 3"。當元素2、3也出隊後,佇列快照是"",即為空。現有3個正整數元素依次入隊、出隊。已知它們的和為8,則共有____49_____種可能的不同的佇列快照(不同佇列的相同快照只計一次)。例如,「5 1」、「4 2 2」、""都是可能的佇列快照;而"7"不是可能的佇列快照,因為剩下的2個正整數的和不可能是1。
分析:三個數之和不超過8,所以單個資料最大為6,所有組合包括一位數,二位數,三位數即1、2、3、4、5、6、11、12、13、14、15、16、111、112、113、114、115、116…611
共48個,但是還有乙個特例就是全部出隊
共49個
雙向鍊錶中有兩個指標域 llink 和 rlink,分別指向該結點的前驅及後繼。設 p 指向鍊錶中的乙個結點,它的左右結點均非空。現要求刪除結點 p,則下面語句序列中錯誤的是( )。
a. p->rlink->llink=p->llink; p->rlink->llink->rlink=p->rlink; delete p;
b. p->llink->rlink=p->rlink; p->llink->rlink->llink=p->llink; delete p;
c. p->llink->rlink=p->rlink; p->rlink->llink=p->llink; delete p;
d. p->rlink->llink=p->rlink; p->llink->rlink=p->llink; delete p;
答案a是正確的。前半部分p->rlink->llink=p->llink;更新了p後繼結點的llink ,使其指向p->llink。後半部分p->rlink->llink指向的就是p的前驅,刪除p,其應指向p->rlink。
答案b正確。原理與答案a類似。
答案c正確
答案d錯誤。p->rlink->llink=p->llink;,p->llink->rlink=p->rlink;
#include
using
namespace std;
const
int num=5;
intr
(int n)
intmain()
列舉遞迴結果
完善程式
(過河問題) 在乙個月黑風高的夜晚,有一群人在河的右岸,想通過唯一的一根獨木橋走到河的左岸。在伸手不見五指的黑夜裡,過橋時必須借照燈光來照明,不幸的是,他們只有一盞燈。另外,獨木橋上最多能承受兩個人同時經過,否則將會坍塌。每個人單獨過獨木橋都需要一定的時間,不同的人要的時間可能不同。兩個人一起過獨木橋時,由於只有一盞燈,所以需要的時間是較慢的那個人單獨過橋所花費的時間。現在輸入 n(2≤n<1000)n(2≤n<1000)和這 nn 個人單獨過橋需要的時間,計算總共最少需要多少時間,他們才能全部到達河左岸。
例如,有 3 個人甲、乙、丙,他們單獨過橋的時間分別為11、22、44,則總共最少需要的時間為 77。具體方法是:甲、乙一起過橋到河的左岸,甲單獨回到河的右岸將燈帶回,然後甲,丙在一起過橋到河的左岸,總時間為 2+1+4=72+1+4=7。
#include
#include
using
namespace std;
const
int size=
100;
const
int infinity =
10000
;const
bool left=
true
;const
bool right =
false
;const
bool left_to_right=
true
;const
bool right_to_left=
false
;int n,hour[size]
;bool pos[size]
;int
max(
int a,
int b)
intgo
(bool stage)
if( ① )
return ans;
ans=infinity;
for(i=
1;i<=n-
1;i++)if
(pos[i]
==right)
for(j=i+
1;j<=n;j++)if
(pos[j]
==right)
return ans;}if
(stage==left_to_right)
return ans;
}return0;
}int
main()
cout<<
go(right_to_left)
<
return0;
}
分析:本題通過深度優先搜尋,計算最小過橋時間。go(stage)中stage表示不同的搜尋方向,從右到左或是從左到右。
①,通過記錄右邊橋頭的人數來判斷是否遞迴呼叫結束。當右邊橋頭人數num<=2時,結束呼叫。
②,暴力列舉所有組合,打擂台求往返兩端的最少時間。tmp=max(hour[i],hour[j])+ go(left_to_right);,max(hour[i],hour[j])表示從右邊到左邊用時,go(left_to_right)深度優先搜尋當前分支的總用時。
③,處理從左向右走時的時間,所以應判斷 pos[i] == left
④,計算如果讓第i個人返回時所用的總時間,此時tmp=hour[i]+go(right_to_left);
⑤,回溯時要求恢復現場,pos[i]=left。
(哥德**猜想)哥德**猜想是指,任一大於2的偶數都可寫成兩個質數之和。迄今為止,這仍然是乙個著名的世界難題,被譽為數學王冠上的明珠。試編寫程式,驗證任一大於2且不超過n的偶數都能寫成兩個質數之和。
#include
using
namespace std;
intmain
(void)if
(tmp)
} ans =0;
for(i =
2; i <= n /
2; i++)if
(tmp)
ans++;}
cout << ans << endl;
return0;
}
分析:哥德**猜想先要線性求質數,1:將tmp初始化成真。
2:求質數
3:將質數儲存
4:證明哥德**猜想
5:1004
3.以下邏輯表示式的值恒為真的是( )。
a.p∨(¬p∧q)∨(¬p∧¬q)
b.q∨(¬p∧q)∨(p∧¬q)
c.p∨q∨(p∧¬q)∨(¬p∧q)
d.p∨¬q∨(p∧¬q)∨(¬p∧¬q)
分析:將p、q帶入真假值求即可
NOIP 2010 普及組解題報告
題目分析 一 數字統計 此題,曾經在某oj上看到過原題。要求和實現都非常簡單。無非是,列舉出所有在範圍內的數字,然後對數字進行拆分,對每一位數字進行判斷。乙個樸素的for迴圈,巢狀乙個while迴圈,就可以解決這道題目。下面是程式的核心部分 for i l i r i 此題丟分,絕對可以認為是絕不應...
NOIP2010 普及組 數字統計
題目鏈結 題目描述 請統計某個給定範圍 l,r 的所有整數中,數字 2 出現的次數。比如給定範圍 2,22 數字 2 在數 2 現了 1 次,在數 12 現 1 次,在數 20 現 1次,在數 21 現 1 次,在數 22 現 2次,所以數字 2 在該範圍內一共出現了 6次。輸入格式 2個正整數 l...
NOIP 2010 普及組解題報告
題目分析 一 數字統計 此題,曾經在某oj上看到過原題。要求和實現都非常簡單。無非是,列舉出所有在範圍內的數字,然後對數字進行拆分,對每一位數字進行判斷。乙個樸素的for迴圈,巢狀乙個while迴圈,就可以解決這道題目。下面是程式的核心部分 for i l i r i t i while t 0 y...