2012-03-10 3 views
-4

안녕에 퍼즐을 해결하기 위해 노력 도움말 - 나는 C++로를 작성하고 메신저 매우 성가신 결과를 얻고있다 http://www.spotify.com/uk/jobs/tech/best-before/C++ 나는 스포티 파이 웹 사이트에 퍼즐을 해결하기 위해 노력하고있는 스포티 파이

. 쓸모가없고 아무것도하지 않는 pause이라는 int가 있습니다.하지만 삭제하면 프로그램이 잘못된 결과를 반환하는 것처럼 보입니다.

#include <iostream> 
    #include <string> 
    #include <sstream> 

    using namespace std; 
    int Year; 
    int Month; 
    int Day; 

    int pause; // <--- My useless INT which when Deleted my code returns wrong output 

    stringstream ss; 
    string input; 
    string in; 
    bool loop=true; 
    int date[3]; 
    bool DateFound=false; 

      void Check_date(); 
      void Check_date() 
     { 

if(DateFound==false) 
{ 
//Check if valid Year 
if (date[1]<2999 && date[1]>0 && date[2]>0 && date[3]>0) 
{ //check months & days are valid 
    if(date[2]==1 || date[2]==3 || date[2]==5 || date[2]==7 || date[2]==8 || date[2]==10 || date[2]==12){if(date[3]<=31){DateFound=true;}} 
    if(date[2]==4 || date[2]==6 || date[2]==9 || date[2]==11){if(date[3]<=30){DateFound=true;}} 
    //Check For Leap Year 
    if (date[2]==2) 
    { if(date[3]<28)DateFound=true; 
     if(date[1]%4==0 && date[3]<=29)DateFound=true; 
     if(date[1]%100==0 && date[1]%400!=0 && date[3]>28)DateFound=false; 
    } 

if(DateFound==true){Year=date[1]; Month=date[2]; Day=date[3];} 
} 
} 

     } 

     void SwitchDate(){int temp; temp=date[2]; date[2]=date[3]; date[3]=temp; 

    Check_date();}; 
    void ShiftDate(int places) 
    { if(places==1) 
     { 
     int temp; temp=date[3]; date[3]=date[2]; date[2]=temp; temp=date[1]; date[1]=date[2]; date[2]=temp; Check_date(); 
     } 
     if(places==2) 
     { 
     int temp; temp=date[1]; date[1]=date[2]; date[2]=temp; temp=date[2]; date[2]=date[3]; date[3]=temp; Check_date(); 
    } 
}; 

int main() 
{ 

while(loop==true) 
{ 
cin >> input; 
for (int x=0, y=1; y<4; y++, x++) 
    { 
     while (input[x] !='/' && x !=input.length()) ss<<input[x++]; 
     ss>> date[y]; 
     ss.clear(); 
    } 

//order small medium large 

for (int x=3, temp; x!=0; x--) 
{ 
    if (date[x] < date[x-1]) 
     { temp=date[x-1]; 
      date[x-1]=date[x]; 
      date[x]=temp; 
     } 
    if (x==1 && (date[2] > date[3])) 
      { 
       temp=date[3]; 
       date[3]=date[2]; 
       date[2]=temp; 
      } 

} 

Check_date();//return true 
SwitchDate(); 
ShiftDate(1); 
SwitchDate(); 
ShiftDate(2); 
SwitchDate(); 

//PRINT 

cout <<Year; cout<< endl; 
cout <<Month; cout<< endl; 
cout <<Day; cout<< endl; 

//   13/12/5 

cout <<"Again? 'Y' or 'N' \n"; 
cin >>in; 
if(in=="y" || in=="Y"){loop=true;} 
if(in=="n" || in=="N"){loop=false;} 
} 

return 0; 
} 
+3

내 시간에 형식이 잘못된 코드를 보았습니다. 그러나 이것은 최악의 경우입니다! 죄송합니다 ... 문제가있는 곳을보기 위해 읽을 수 없습니다. – Johnsyweb

+0

http://codegolf.stackexchange.com/에 가장 적합합니다. – jweyrich

답변

3
int date[3]; 

하는 세 가지 int의의 arary로 date 선언했다. int 세 개는 date[0], date[1]date[2]입니다.

그러나,이 라인

if (date[1]<2999 && date[1]>0 && date[2]>0 && date[3]>0) 

에 존재하지 않는 date[3]라는 뭔가를 참조하십시오.

C 및 C++에서 배열은 0을 기점으로입니다. 즉, 첫 번째 요소의 색인은 0입니다. 배열의 크기가 N 인 경우 최종 요소의 색인은 N-1입니다.

+0

OP가 말하는 'int pause'는 어떻습니까? 그게 무슨 생각인지 알아? – noMAD

+0

내 문제를 해결해 주셔서 감사합니다! 나는 날짜 배열의 색인을 0-2가 아닌 1-3에서 시작하려고했지만 date [3]은 존재하지 않았습니다. 그 전에 선언 된 int가있을 때 그것이 왜 효과가 있었는지 어떤 생각입니까? 다시 한 번 감사드립니다. – Scott