編程邏輯題
① 一道關於邏輯推理的C語言編程題
這個得用枚舉法做:把各種可能的情況都考慮到,並對全部可能結果逐一進行判斷,過濾掉那些不符合要求的,保留符合要求的結果,這種方法叫枚舉演算法(Enumerative algorithm)
設定冠軍為X(1<=X<=6)
甲乙丙丁四個人的話可以用邏輯表達式表示如下:
甲:X=1 OR X=2
乙:X<>3
丙:X<=3
丁:X>=4
② 一道C語言邏輯題,怎麼編寫
A選手說:B第二,我第三;
B選手說:我第二,E第四;
C選手說:我第一,D第二;
D選手說:C最後,我第三;
E選手說:我第四,A第一;
=========================
假如A說的前半句是對的.則.B第二.A第一.E不是第四.D第二.矛盾..所以
A的後半句是對的.
所以A第三,E第四.C第五.D第二.B第一.
呵呵.我不懂怎麼編程...
③ java 邏輯編程題
這個問題,首先應該是在純數學方面去找出演算法之後,再把這個演算法換成程序,樓主可以試試去數學區或一些專門的數學論壇找找這個問題的答案先.本人數學比較差,實在想不出這個演算法.
如果不做數學上的簡化的話,程序可以這樣寫
int count=0;
for(int i1=1;i1<=99;i1++)
for(int i2=1;i2<=99;i2++)
for(int i3=0;i3<=99;i3++)
for(int i4=0;i4<=99;i4++)
.......//表示省略,一直寫100個for,除了前兩個是從1開始,其他都是從0開始
for(int i100=0;i100<=99;i100++)
if(i1>=i2&&i2>=i3&&a3>=i4&&...&&i99>=i100&&
i1+i2+i3+..+i100==100)
count++;
System.out.println(count);
列印出來的應該就是你要的答案了.當然這個程序只是理論上可行的程序,這個程序的時間復雜度的數量級在n的100次方,真正這樣計算的話,不知道要算多少年才能算出答案.說不定要算到地球毀滅的那一天......
所以這個問題的難度在純數學層面的,數學太差幫不上忙,沒辦法.
④ 編程解邏輯學問題
只有一個程序文件。
思路簡介:對問題的分析理解為,每一句話都縮小了可能的取值集合,通過
三句話排除其它各種可能最終確定了生日。
這里用一個矩陣來表示,矩陣的行列分別與可能取值中的月與日對應,且各
自都是按升序排列的。例如,若最終答案為3-3(本題的答案是2-0),則就是
12月5日(當然這里只是舉個例子)。
通過三句話,每次排除相應的行列即去除不符合的月份和日子。
#include <cstdlib>
#include <iostream>
#define M 5
#define N 7
using namespace std;
void initmn_r(short [][N]);
void initmn_c(short [][N]);
void displaymn(short [][N]);
int main(int argc, char *argv[])
{
short mn[M][N] = {{0,0,1,1,0,1,0},
{0,0,1,0,1,0,0},
{1,0,0,1,0,0,0},
{1,1,0,0,0,1,0},
{0,0,0,0,0,0,-1}};
bool flag = false; //the flag for the answer's existence
//initialize:
//init for column
initmn_c(mn);
//init for row
initmn_r(mn);
//the judge rule 1:小明說:如果我不知道的話,小強肯定也不知道
for(int j=0;j<N-1;j++)
if(mn[M-1][j]==1){ //找到相應的列,以便排除掉相應的行.
for(int i=0;i<M-1;i++)
if(mn[i][j] == 1) //確定要排除的行
for(int k=0;k<N;k++)
mn[i][k] = 0;
mn[M-1][j] = 0;
}
//the judge rule 2:小強說:本來我也不知道,但是現在我知道了
//first init again
initmn_c(mn);
for(int j=0;j<N-1;j++)
if(mn[M-1][j]>1){ //找到要排除的列
for(int i=0;i<M;i++)
mn[i][j] = 0;
}
//the judge rule 3:小明說:哦,那我也知道了
//first init again:
initmn_r(mn);
for(int i=0;i<M-1;i++)
if(mn[i][N-1]==1){
flag = true;
for(int j=0;j<N-1;j++)
if(mn[i][j]==1){
cout << "We've found it!\n";
cout << "The Result is :\n" << i << '-'<<j << endl;
}
}
if(flag==false)
cout << "No answer!\n";
system("PAUSE");
return EXIT_SUCCESS;
}
void initmn_c(short pmn[][N])
{
for(int k=0;k<N-1;k++)
pmn[M-1][k] = 0;
for(int j=0;j<N-1;j++)
for(int i=0;i<M-1;i++)
pmn[M-1][j]+=pmn[i][j];
}
void initmn_r(short pmn[][N])
{
for(int k=0;k<M-1;k++)
pmn[k][N-1] = 0;
for(int i=0;i<M-1;i++)
for(int j=0;j<N-1;j++)
pmn[i][N-1]+=pmn[i][j];
}
void displaymn(short pmn[][N])
{
cout << "Now Matrix is:\n";
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
cout << pmn[i][j] << '\t';
cout << endl;
}
cout << endl;
}
這個方法對於類似的判斷准則都是可取的。如果你還有不明白的地方,可以給我發郵件[email protected]
⑤ java編程邏輯性題
給你一個比較神奇的題Int i=0;a=(i++)+(i++)+(i++);b=(++i)+(++i)+(++i);System.out.print("a="+a);System.out.print("b="+b);猜猜a和b的值,在不同的編譯器和不同的電腦上試試,你也可以使用不同的語言試試。很神奇哦。 再給你一個邏輯思維比較強的題求13的13次方的後四位。 還有個題int a=5int b=7要求不能使用第三個變數,交換a和b的值。 提示:第一題和底層有關,所以對於初學者來說沒有必要弄清楚,純屬娛樂第二題和計算機數學有關,搞會了對以後的發展大有幫助。第三題是純邏輯題,說難也不難,就要看你是怎麼理解變數的了。 如果能搞懂這三道題 你的邏輯也就差不多了吧。
⑥ c加加編程比賽名次邏輯推理題
#include <stdio.h>
int main(void)
{
const char players[6] = {'A', 'B', 'C', 'D', 'E', 'F'};
int w; /* w = winner */
int jia, yi, bing, ding;
for (w=0; w<6; w++) {
jia = (w==1 || w==2);
yi = (w != 3);
bing = (w!=4 && w!=5 && w!=6);
ding = (w==4 || w==5 || w==6);
/* one of them is right */
if (jia+yi+bing+ding == 1) printf("Winner is %c\n", players[w]);
}
return 0;
}
⑦ 一道編程邏輯題,求大神解答是否有演算法
1號明顯錯……
應該是8192號~
通解:n個人的隊列,應該排在第m位,m滿足m=2^k(k為使m<=n的最大整數),這個可以證明的,這里就不浪費篇幅了
滿意望採納謝謝!!!