1. 程式人生 > >小小偵探 + 楊輝三角

小小偵探 + 楊輝三角

  • 5位運動員參加了10米臺跳水比賽,有人讓他們預測比賽結果
    A選手說:B第二,我第三;
    B選手說:我第二,E第四;
    C選手說:我第一,D第二;
    D選手說:C最後,我第三;
    E選手說:我第四,A第一;
    比賽結束後,每位選手都說對了一半,請程式設計確定比賽的名次
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main( )
{
	int a, b, c, d, e;
	for (a = 1; a <= 5; a++)
	{
		for (b = 1; b <= 5; b++)
		{
			for (c = 1; c <= 5; c++)
			{
				for (d = 1; d <= 5; d++)
				{
					for (e = 1; e <= 5; e++)
					{
						if (((b == 2 && a != 3) || (b != 2 && a == 3))
							&& ((b == 2 && e != 4) || (b != 2 && e == 4))
							&& ((c == 1 && d != 2) || (c != 1 && d == 2))
							&& ((c == 5 && d != 3) || (c != 5 && d == 3))
							&& ((e == 4 && a != 1) || (e != 4 && a == 1)))
							

> 每一個人說的話,一般為真,一般為假,分兩種情況討論。

						{
							if ((a != b && a != c && a != d && a != e && b != c && b!=d && b != e && c != d &&c != e && d != e))
							

> 限定A,B ,C ,D ,E 的名次不相同。

							{

								printf("A=%d ,B=%d ,C=%d ,D=%d ,E=%d \n", a, b, c, d, e);
							}
						}
					}
				}
			}
		}
	}
	return 0;
}
  • 日本某地發生了一件謀殺案,警察通過排查確定殺人凶手必為4個
    嫌疑犯的一個。以下為4個嫌疑犯的供詞。
    A說:不是我。
    B說:是C。
    C說:是D。
    D說:C在胡說
    已知3個人說了真話,1個人說的是假話。
    現在請根據這些資訊,寫一個程式來確定到底誰是凶手。
#include <stdio.h>
int main ( )
{
   int killer ='0';
   for (killer =='A'; killer =='D';killer++)
      {
         if ( (killer!='A')+ (killer=='C') +(killer=='D') +(killer!='D')==3)
           {
              printf ("%c ",killer);
           }
      }
    return 0;
 }
    

邏輯上的真假用0和1表示,當進行邏輯上的判斷時,可以直接進行數量上的加減。

  • 在螢幕上列印楊輝三角。
#include <stdio.h>
#define N 9
int main( )
{
   int i=0;
   int j=0;
     for (i=0;i<N;i++)
     {
        arr[i][0] =1;
        arr[i][i] =1;
     }
     
       for (i=2;i<N;i++)
       { 
           for (j=1;j<i;j++)
           { 
               arr[i][j] =arr[i-1][j] +arr[i-1][j-1];
           }        
        }
     for (i=0; i<N;i++)
      {
        for (j=0; **j< 3*(N-i)/2** ; j++)
        

> 這裡相當於一個尺度的限定,來調整三角形的形狀,
  N-i /2 就是每一行前面所需要的空格的數量,
  3倍控制其寬度的大小。

        {
           printf (" ");
        }
       for (j=0;j<i;j++)
       {
          printf ("%**3**d ",arr[i][j]);
       }
     printf ("\n");
    return 0;        
  }