כותרת: ככה אני פתרתי:
את השאלה השנייה כמו שדניאל אמר, ממש 2 שורות.
int CheckNumber(int N)//0
{
int X = 3 * N;//0
return (X &= (X – 1)) && (X &= (X – 1)) && !(X &= (X – 1));//0
}
את השאלה השלישית בדרך הזו:
תוך כדי קליטת האיברים לתוך המערך שמרתי את הזוגיות של הסכום שלהם (ה-XOR של ה-LSB שלהם). אם בסוף יצא אפס, המערך פתיר.
איפסתי את כל האיברים חוץ מהראשון על-ידי:
Add(1, X, -Array[X]);//0
ואז איפסתי את האיבר הראשון (בהנחה שהוא עדיין לא מאופס), שהוא בטוח זוגי, על-ידי:
D = Array[0] / 2;//0
Add(1, 2, -D);//0
Add(2, 3, D);//0
Add(1, 3, -D);//0
(הוספתי בסוף כל שורה //0 כדי שיהיה קריא בפורום.)