C ++帮助尝试解决spotify上的难题[关闭]

Posted

技术标签:

【中文标题】C ++帮助尝试解决spotify上的难题[关闭]【英文标题】:C++ Help trying to solve the puzzles on the spotify [closed] 【发布时间】:2012-03-27 11:08:28 【问题描述】:

您好,我正在尝试解决 spotify 网站上的难题 - 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;

【问题讨论】:

我曾经见过一些格式错误的代码,但这是最糟糕的!抱歉...我无法阅读此内容以了解问题所在。 最适合codegolf.stackexchange.com。 【参考方案1】:
int date[3];

您已将date 声明为三个ints 的数组。三个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 索引。如果数组大小为 N,则最后一个元素由 N-1 索引。

【讨论】:

OP 所说的int pause 怎么样?知道这是怎么回事吗? 谢谢你解决了我的问题!我想从 1-3 而不是 0-2 开始日期数组的索引,但 date[3] 不存在。知道为什么当我在它之前声明了一个 int 时它会起作用吗?再次感谢

以上是关于C ++帮助尝试解决spotify上的难题[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

ant中下拉框选项显示不全

使用 IOService 端口引用关闭设备

终止 Shell 命令

c中的基数排序算法[关闭]

Windows 10上的Composer安装错误:安装目录不可写

getline c ++需要帮助[关闭]