Life of xhu

About

后考研时代(二) & HOJ_1409

Feb 25, 2014

  |   #日常   |   #HOJ

考研的阴霾终于是过去了,虽然想起过去的半年,心里还是会有些不舒服,但是已经不再是要死要活的感觉。和爸妈视频的时候也小心的回避了这个话题,大家心里都有数,我的前20年还是太一帆风顺了一点,人总是要经历挫折的,加油!

毕业设计也要上轨道了,每天上午在寝室看书,下午敲代码,晚上去正心,倒也不错,感觉又回到了大二大三的时候。

要开始找工作了,一直都没敢想的事突然就变得迫切起来,努力复习算法,数据结构,C语言ing。

已经辜负了很多人一次,不能让他们再次失望。

就从去哪儿开始吧,找工作攻坚战,开始!

Fight!!

~~~~~~~~~~~~我是萌萌的昏割线~~~~~~~~~~~~~

1409:这道题的题意不难,就是找一个数字序列中升序和降序的数字数量,注意一下前后相等的情况就好。

但是这道题让我知道了一件事,就是如果HOJ显示WA,不一定是结果错了,有时候简单的格式错误,也可能导致WA而不是PE。比如这题,其实两个数字前的空格单纯就是空格,即使数字的整数不止一位,也需要空这么多,唯一要求的仅仅是小数位而已,所以只需要使用setprecision()就行了,不需要使用setw()。我一开始使用了setw(),就会导致WA,想了半天不知道哪错了,然后试着修改了一下输出格式,AC。。。

然后,我刚刚才知道,原来C/C++里是支持连续赋值的,比如:

int a, b, c;
a = b = c = 0;

会把这三个变量都赋为0

话不多说,代码如下:

#include <iostream>
#include <iomanip>
using namespace std;

int main(){
    int nums[40], count, up, down, eql, up_times, down_times;
    bool up_down, sta, eql_state;
    while(cin >> nums[0] && nums[0] != 0){
        up = down = eql = up_times = down_times = count = 0;
        sta = true, eql_state = false;
        while(cin >> nums[++count] && nums[count] != 0);
        if(count == 1) cout << "Nr values = 1:  0.000000 0.000000" << endl;
        else{
            for(int i = 1; i < count; i++){
                if(nums[i] == nums[i - 1]){
                    eql++;
                    eql_state = true;
                }else{
                    if(sta){
                        if(nums[i] > nums[i - 1]){
                            up_times++;
                            if(eql_state) up = up + eql + 1;
                            else up++;
                            up_down = true;
                        }else if(nums[i] < nums[i - 1]){
                            down_times++;
                            if(eql_state) down = down + eql + 1;
                            else down++;
                            up_down = false;
                        }
                        sta = false;
                    }else{
                        if(nums[i] > nums[i - 1]){
                            if(up_down){
                                if(eql_state) up = up + eql + 1;
                                else up++;
                            }else{
                                up_times++;
                                if(eql_state) down += eql;
                                up++;
                            }
                            up_down = true;
                        }else if(nums[i] < nums[i - 1]){
                            if(!up_down){
                                if(eql_state) down = down + eql + 1;
                                else down++;
                            }else{
                                down_times++;
                                if(eql_state) up += eql;
                                down++;
                            }
                            up_down = false;
                        }
                    }
                    eql = 0;
                    eql_state = false;
                }
            }
            if(eql_state && !sta){
                if(up_down) up += eql;
                else down += eql;
            }
            cout << "Nr values = " << count << ":  ";
            if(up_times) cout << fixed << setprecision(6) << (double)up / (double)up_times << ' ';
            else cout << "0.000000 ";
            if(down_times) cout << fixed << setprecision(6) << (double)down / (double)down_times << endl;
            else cout << "0.000000" << endl;
        }
    }
}