2013/12/11

[C] 組合

剛好用到求組合數
就順便紀錄下來

#include <stdio.h>
#include <conio.h>

int main()
{
int n,k,ans=1;
printf("n = ");
scanf("%d",&n);
printf("k = ");
scanf("%d",&k);
if(n-k < k)
k = n-k;
for(int i=0; i<k; i++)
{
ans = ans*n/(i+1);
n--;
}
printf("%d",ans);
getch();
return 0;
}

2013/11/09

[C]二進位轉十進位

#include <stdio.h>
#include <conio.h>

int main()
{
int n,c=1,Dec=0;

scanf("%d",&n);
while(n>0)
{
Dec += (n%10)*c;
c= c*2;
n/=10;
}

printf("%d",Dec);
getch();
         return(0);
}

[C]十進位轉二進位

#include <stdio.h>
#include <conio.h>

int main()
{
        int n,Bin=0,c=1;

scanf("%d",&n);
while(n>0)
{
Bin += (n%2)*c;
c *= 10;
n /= 2;
}

        printf("%d",Bin);
        getch();
        return(0);
}

2013/10/24

[C]cos by taylor expansion

#include <stdio.h>
#include <conio.h>

int main()
{
    double x;
    double fac=1;
    double scale=1;
    double ans=1;
    double sum=0;
    double sign = 1;
   
    printf("x = ");
    scanf("%lf",&x);
   
    for(int i=0; ans>=1e-06; i+=2)
    {
        for(int j=1; j<=i; j++)
        {
            fac*=x;
            scale*=j;
        }
       
        ans = fac/scale;
        sum += sign*ans;
        sign *= -1;
        fac = 1;
        scale = 1;
    }
   
    printf("%lf",sum);
    getch();
    return 0;
}

2013/10/06

[HW]找偽幣

輸入: 32枚外觀看起來都相同的硬幣, 其中一枚是偽幣而且其重量與其他31枚不同(輕與重都有可能)
輸出: 找出這枚偽幣並且決定它是比真幣輕或重

Note 1: 唯一能使用的工具是一支天秤
Note 2: 只能使用5次天秤就必需找出偽幣並且決定它是比真幣輕或重


#include <iostream>
#include <cstdlib>

using namespace std;

int Coin[32]; //存取硬幣質量 硬幣編號由0開始到31 ps.宣告為全域變數供其他副程式使用

//用來比較偽幣和真幣值輛大小的副程式CheckMass(),回傳大於or小於符號提供輸出
char CheckMass(int M_1, int M_2, int M_3, int M_4) //這個檢測實際上是觀察3rd的結果,以在5th給出結論
{
    //M_1 + M_2代表真幣質量和,M_3 + M_4代表偽幣與真幣質量和,藉以判斷偽幣質量較真幣輕或重
    if(M_1 + M_2 > M_3 + M_4)
    {
        return '<';
    }
    else
    {
        return '>';
    }
}

//用來計算各個分組質量(此處為相對值,令真幣質量為1單位)的副程式GetGroupWeight()
int GetGroupWeight(int Begin, int End)
{
    int Sum = 0;

    for(int i=Begin; i<=End; i++)
    {
        Sum = Sum + Coin[i];
    }

    return Sum;
}

int main()
{
    int FakeNo,FakeNoWeight;
    int Group_A, Group_B, Group_C, Group_D;
    //作法:將所有硬幣編號,由0~31,並平均分為4組(A B C D),每組8個

    //初始化陣列 將所有硬幣質量以1為基準
    for(int i=0; i<32; i++)
    {
       Coin[i] = 1;
    }


    cout << "請輸入偽幣編號: ";
    cin >> FakeNo;
    cout << "請輸入偽幣質量(大於或小於1): ";
    cin >> FakeNoWeight;

    Coin[FakeNo] = FakeNoWeight;

    Group_A = GetGroupWeight(0,7);
    Group_B = GetGroupWeight(8,15);
    Group_C = GetGroupWeight(16,23);
    Group_D = GetGroupWeight(24,31);

    if(Group_A == Group_B) // 1st time 推論偽幣在C or D之中
    {
        if(Group_A == Group_C) //2nd 偽幣在 D,將其兩兩一組,分成4小組
        {
            if(Coin[24] + Coin[25] == Coin[26] + Coin[27]) // 3rd 推論偽幣是編號(28 29) (30 31)之一
            {
                if(Coin[0] + Coin[1] == Coin[28] + Coin[29]) //4th 推論偽幣是編號(30 31)之一
                {
                    if(Coin[0] == Coin[30]) //5th 結論
                    {
                        cout << "偽幣編號為 " << 31 << " 質量 " << CheckMass(1,1,Coin[30],Coin[31]) << " 真幣" << endl;
                    }
                    else
                    {
                        cout << "偽幣編號為 " << 30 << " 質量 " << CheckMass(1,1,Coin[30],Coin[31]) << " 真幣" << endl;
                    }
                }
                else //推論偽幣是編號(28 29)之一
                {
                    if(Coin[0] == Coin[28]) //5th 結論
                    {
                        cout << "偽幣編號為 " << 29 << " 質量 " << CheckMass(1,1,Coin[28],Coin[29]) << " 真幣" << endl;
                    }
                    else
                    {
                        cout << "偽幣編號為 " << 28 << " 質量 " << CheckMass(1,1,Coin[28],Coin[29]) << " 真幣" << endl;
                    }
                }
            }
            else //推論偽幣是編號(24 25) (26 27)之一
            {
                if(Coin[0] + Coin[1] == Coin[24]+ Coin[25]) //4th 推論偽幣是編號(26 27)之一
                {
                    if(Coin[0] == Coin[26]) //5th 結論
                    {
                        cout << "偽幣編號為 " << 27 << " 質量 " << CheckMass(1,1,Coin[27],Coin[28]) << " 真幣" << endl;
                    }
                    else
                    {
                        cout << "偽幣編號為 " << 26 << " 質量 " << CheckMass(1,1,Coin[27],Coin[28]) << " 真幣" << endl;
                    }
                }
                else //推論偽幣是編號(24 25)之一
                {
                    if(Coin[0] == Coin[24]) //5th 結論
                    {
                        cout << "偽幣編號為 " << 25 << " 質量 " << CheckMass(1,1,Coin[24],Coin[25]) << " 真幣" << endl;
                    }
                    else
                    {
                        cout << "偽幣編號為 " << 24 << " 質量 " << CheckMass(1,1,Coin[24],Coin[25]) << " 真幣" << endl;
                    }
                }
            }
        }
        else //偽幣在C,將其兩兩一組,分成4小組
        {
            if(Coin[16] + Coin[17] == Coin[18] + Coin[19]) // 3rd 推論偽幣是編號(20 21) (22 23)之一
            {
                if(Coin[0] + Coin[1] == Coin[20] + Coin[21]) //4th 推論偽幣是編號(22 23)之一
                {
                    if(Coin[0] == Coin[22]) //5th 結論
                    {
                        cout << "偽幣編號為 " << 23 << " 質量 " << CheckMass(1,1,Coin[22],Coin[23]) << " 真幣" << endl;
                    }
                    else
                    {
                        cout << "偽幣編號為 " << 22 << " 質量 " << CheckMass(1,1,Coin[22],Coin[23]) << " 真幣" << endl;
                    }
                }
                else //推論偽幣是編號(20 21)之一
                {
                    if(Coin[0] == Coin[20]) //5th 結論
                    {
                        cout << "偽幣編號為 " << 21 << " 質量 " << CheckMass(1,1,Coin[20],Coin[21]) << " 真幣" << endl;
                    }
                    else
                    {
                        cout << "偽幣編號為 " << 20 << " 質量 " << CheckMass(1,1,Coin[20],Coin[21]) << " 真幣" << endl;
                    }
                }
            }
            else //推論偽幣是編號(16 17) (18 19)之一
            {
                if(Coin[0] + Coin[1] == Coin[16]+ Coin[17]) //4th 推論偽幣是編號(18 19)之一
                {
                    if(Coin[0] == Coin[18]) //5th 結論
                    {
                        cout << "偽幣編號為 " << 19 << " 質量 " << CheckMass(1,1,Coin[18],Coin[19]) << " 真幣" << endl;
                    }
                    else
                    {
                        cout << "偽幣編號為 " << 18 << " 質量 " << CheckMass(1,1,Coin[18],Coin[19]) << " 真幣" << endl;
                    }
                }
                else //推論偽幣是編號(16 17)之一
                {
                    if(Coin[0] == Coin[16]) //5th 結論
                    {
                        cout << "偽幣編號為 " << 17 << " 質量 " << CheckMass(1,1,Coin[16],Coin[17]) << " 真幣" << endl;
                    }
                    else
                    {
                        cout << "偽幣編號為 " << 16 << " 質量 " << CheckMass(1,1,Coin[16],Coin[17]) << " 真幣" << endl;
                    }
                }
            }
        }
    }
    else //偽幣在A or B之中
    {
        if(Group_A == Group_C) // 2nd 偽幣在B,將其兩兩一組,分成4小組
        {
            if(Coin[8] + Coin[9] == Coin[10] + Coin[11]) // 3rd 推論偽幣是編號(12 13) (14 15)之一
            {
                if(Coin[0] + Coin[1] == Coin[12] + Coin[13]) //4th 推論偽幣是編號(14 15)之一
                {
                    if(Coin[0] == Coin[14]) //5th 結論
                    {
                        cout << "偽幣編號為 " << 15 << " 質量 " << CheckMass(1,1,Coin[14],Coin[15]) << " 真幣" << endl;
                    }
                    else
                    {
                        cout << "偽幣編號為 " << 14 << " 質量 " << CheckMass(1,1,Coin[14],Coin[15]) << " 真幣" << endl;
                    }
                }
                else //推論偽幣是編號(12 13)之一
                {
                    if(Coin[0] == Coin[12]) //5th 結論
                    {
                        cout << "偽幣編號為 " << 13 << " 質量 " << CheckMass(1,1,Coin[12],Coin[13]) << " 真幣" << endl;
                    }
                    else
                    {
                        cout << "偽幣編號為 " << 12 << " 質量 " << CheckMass(1,1,Coin[12],Coin[13]) << " 真幣" << endl;
                    }
                }
            }
            else //推論偽幣是編號(8 9) (10 11)之一
            {
                if(Coin[0] + Coin[1] == Coin[8]+ Coin[9]) //4th 推論偽幣是編號(10 11)之一
                {
                    if(Coin[0] == Coin[10]) //5th 結論
                    {
                        cout << "偽幣編號為 " << 11 << " 質量 " << CheckMass(1,1,Coin[10],Coin[11]) << " 真幣" << endl;
                    }
                    else
                    {
                        cout << "偽幣編號為 " << 10 << " 質量 " << CheckMass(1,1,Coin[10],Coin[11]) << " 真幣" << endl;
                    }
                }
                else //推論偽幣是編號(8 9)之一
                {
                    if(Coin[0] == Coin[8]) //5th 結論
                    {
                        cout << "偽幣編號為 " << 9 << " 質量 " << CheckMass(1,1,Coin[8],Coin[9]) << " 真幣" << endl;
                    }
                    else
                    {
                        cout << "偽幣編號為 " << 8 << " 質量 " << CheckMass(1,1,Coin[8],Coin[9]) << " 真幣" << endl;
                    }
                }
            }
        }
        else //偽幣在A,將其兩兩一組,分成4小組
        {
            if(Coin[0] + Coin[1] == Coin[2] + Coin[3]) // 3rd 推論偽幣是編號(4 5) (6 7)之一
            {
                if(Coin[8] + Coin[9] == Coin[4] + Coin[5]) //4th 推論偽幣是編號(6 7)之一
                {
                    if(Coin[0] == Coin[6]) //5th 結論
                    {
                        cout << "偽幣編號為 " << 7 << " 質量 " << CheckMass(Coin[8],Coin[9],Coin[6],Coin[7]) << " 真幣" << endl;
                    }
                    else
                    {
                        cout << "偽幣編號為 " << 6 << " 質量 " << CheckMass(Coin[8],Coin[9],Coin[6],Coin[7]) << " 真幣" << endl;
                    }
                }
                else //推論偽幣是編號(4 5)之一
                {
                    if(Coin[8] == Coin[4]) //5th 結論
                    {
                        cout << "偽幣編號為 " << 5 << " 質量 " << CheckMass(Coin[8],Coin[9],Coin[4],Coin[5]) << " 真幣" << endl;
                    }
                    else
                    {
                        cout << "偽幣編號為 " << 4 << " 質量 " << CheckMass(Coin[8],Coin[9],Coin[4],Coin[5]) << " 真幣" << endl;
                    }
                }
            }
            else //推論偽幣是編號(0 1) (2 3)之一
            {
                if(Coin[8] + Coin[9] == Coin[0]+ Coin[1]) //4th 推論偽幣是編號(2 3)之一
                {
                    if(Coin[0] == Coin[2]) //5th 結論
                    {
                        cout << "偽幣編號為 " << 3 << " 質量 " << CheckMass(Coin[8],Coin[9],Coin[2],Coin[3]) << " 真幣" << endl;
                    }
                    else
                    {
                        cout << "偽幣編號為 " << 2 << " 質量 " << CheckMass(Coin[8],Coin[9],Coin[2],Coin[3]) << " 真幣" << endl;
                    }
                }
                else //推論偽幣是編號(0 1)之一
                {
                    if(Coin[8] == Coin[0]) //5th 結論
                    {
                        cout << "偽幣編號為 " << 1 << " 質量 " << CheckMass(Coin[8],Coin[9],Coin[0],Coin[1]) << " 真幣" << endl;
                    }
                    else
                    {
                        cout << "偽幣編號為 " << 0 << " 質量 " << CheckMass(Coin[8],Coin[9],Coin[0],Coin[1]) << " 真幣" << endl;
                    }
                }
            }
        }
    }
   
    system("PAUSE");
    return 0;
}

2013/07/26

[ACM] Q483 Word Scramble

#include <iostream>

using namespace std;

string ReverseString(string str)
{
    int Length = str.length();
    string Temp;

    for(int i=Length-1; i>=0; i--)
    {
        Temp += str[i];
    }

    return Temp;
}

int main()
{
    string Message;
    string GetVolcabulary;

    while(true)
    {
        cout << "Please input message:" <<endl;
        getline(cin,Message);
        Message += " ";

        for(int i=0; i<Message.length(); i++)
        {
            if(Message[i] != ' ')
            {
                GetVolcabulary += Message[i];
            }

            else
            {
                cout << ReverseString(GetVolcabulary) << " ";
                GetVolcabulary = "";
            }
        }

        cout << endl;
    }
    cin.get();
    return 0;
}

2013/05/21

"Beauty And A Beat" _Against The Currents

[C++]字串關鍵字搜尋範例


#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    string Data = "";
    string KeyWord = "";
    int Counter = 0;
    int Index = 0;

    cout << "Please input message: ";
    getline(cin,Data);
    cout << "Please input keyword: ";
    getline(cin,KeyWord);

    while(Index < Data.length())
    {
        if(Data.find(KeyWord,Index) != std::string::npos)
        {
            cout << "Find " << "\"" << KeyWord << "\"" << " at [" << Data.find(KeyWord,Index)  << "]."<< endl;
            Counter++;
            Index = Data.find(KeyWord,Index)+KeyWord.length() ;
        }

        else
        {
            break;
        }
    }

    cout << "\"" << KeyWord << "\"" <<  " appears "  << Counter << " times." << endl;

    system(("PAUSE"));
    return 0;
}

2013/05/19

[Arduino] LED 呼吸燈

int Bright = 0;
int Delta = 5;

void setup()
{
  pinMode(3,OUTPUT);
}

void loop()
{
  analogWrite(3,Bright);
  Bright = Bright + Delta;
  
  if((Bright <= 0)||(Bright >= 255)) //0:最暗,255:最亮。
  {
    Delta = -Delta;
   //當到達最暗時,Delta的值變正,亮度漸增;反之,達到最亮時,Delta變負, 亮度漸減                 
  }
  
  delay(30);//控制呼吸燈的頻率
}

2013/05/17

[Arduino] LED 閃爍






void Flash() //所有LED閃爍的副程式
{
  for(int i=2; i<=13; i++)
  {
     digitalWrite(i,HIGH);
  }

  delay(100);

  for(int i=2; i<=13; i++)
  {
     digitalWrite(i,LOW);
  }

  delay(100);
}

void setup()
{
  // put your setup code here, to run once:
  for(int i=2; i<=13; i++)
  {
     pinMode(i,OUTPUT);
  }
}

void loop()
{
  // put your main code here, to run repeatedly:

  for(int i=2; i<=13; i++)
  {
    digitalWrite(i,HIGH);
    delay(50);
    digitalWrite(i,LOW);
    delay(50);
  }

  for(int i=13; i>=2; i--)
  {
    digitalWrite(i,HIGH);
    delay(50);
    digitalWrite(i,LOW);
    delay(50);
  }

  for(int i=0; i<3; i++)
  {
    Flash();
  }

}

2013/05/16

[Arduino] LED 跑馬燈效果


void setup()
{
  // put your setup code here, to run once:
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
}

void loop()
{
  // put your main code here, to run repeatedly:

  int Cnt = 1;
  int N;

  while(true)
  {
    N = (Cnt % 4) + 2;
    digitalWrite(N,HIGH);
    delay(100);
    digitalWrite(N,LOW);
    delay(100);
    Cnt++;
  }
}

2013/05/15

[ACM]Q10929 : You can say 11


#include <cstdlib>
#include <iostream>
#include <sstream>

using namespace std;

int CharToInt(char chr)
{
    stringstream ss;
    int N;
    ss << chr;
    ss >> N;
    return N;
}

int main(int argc, char *argv[])
{
    int Sum = 0;
    string str;
 
    while(true)
    {
        cout << "Please input a number: ";
        getline(cin,str);
     
        if(str == "0")
        {
            break;
        }
     
        for(int i=0; i<str.length(); i++)
        {
            if(i % 2 == 0)
            {
                Sum = Sum + CharToInt(str[i]);
            }
            else
            {
                Sum = Sum - CharToInt(str[i]);
            }
        }
     
        if(Sum == 0)
        {
            cout << str << " is a multiple of 11..." << endl;
        }
        else
        {
            cout << str << " is not a multiple of 11..." << endl;
        }
     
        Sum = 0;
    }
 
    system("PAUSE");
    return EXIT_SUCCESS;
}

2013/02/09

[Mint]Linux Mint 14安裝紀錄

1.Firefox中文化
sudo apt-get install firefox-locale-zh-hant language-pack-zh-hant language-pack-zh-hant-base

2.系統裝好之後到「偏好設定」->「語言支援」裡面把完整的語言支援安裝好
這樣原本的Pidgin、Gimp等等軟體才會變成繁體中文的介面

<有些過程裡忘了0.0 發現其他問題會陸續補上>

2013/02/08

[ACM]Q445 Marvelous Mazes


題目 http://luckycat.kshs.kh.edu.tw/homework/q445.htm

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <sstream>

using namespace std;

int Sum(string str)
{
    stringstream ss;
    int A=0;
    int Sum=0;
 
    for(int i=0; i<str.length(); i++)
    {
        ss << str[i];
        ss >> A;
        Sum = Sum + A;
        ss.clear();
    }
 
    return Sum;
}

int main(int argc, char *argv[])
{
    //cout << Sum("1234") << endl;
    string GetNum = "";
    string Line = "";
    string Target = "0123456789";
    ifstream infile("input.txt",ios::in);
    int Time = 0;
 
    while(!infile.eof())
    {
        getline(infile,Line);
        Line = Line + "!";
        for(int i=0; i<Line.length(); i++)
        {
            if(Target.find(Line[i]) != -1)
            {
                GetNum = GetNum + Line[i];
            }
            else
            {
                if(Line[i] == '!')
                {
                    cout << endl;
                }
             
                else
                {
                    Time = Sum(GetNum);
                    for(int j=0; j<Time; j++)
                    {
                        if(Line[i] == 'b')
                        {
                            cout << " ";
                        }
                     
                        else
                        {
                            cout << Line[i];
                        }
                    }
                    GetNum = "";
                }
            }
        }
    }
    cout << "Press the enter key to continue ...";
    cin.get();
    return EXIT_SUCCESS;
}