目前共有5篇帖子。 內容轉換:不轉換▼
 
點擊 回復
217 4
【试题】连号区间数
一派護法 十九級
1樓 發表于:2016-3-18 22:29
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int sort(int *nums, int n)
{
    int i, j, temp;
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - i - 1; j++)
        {
            if (nums[j] == nums[j + 1])
                return 0;
            if (nums[j] > nums[j + 1])
            {
                temp = nums[j];
                nums[j] = nums[j + 1];
                nums[j + 1] = temp;
            }
        }
    }
    return 1;
}

int main(void)
{
    int i, j, k, n, *nums;
    int *arr;
    int len;
    unsigned long long count = 0;
    
    scanf_s("%d", &n);
    nums = (int *)malloc(n * sizeof(int));
    for (i = 0; i < n; i++)
        scanf_s("%d", nums + i);

    for (i = 0; i < n; i++)
    {
        for (j = i; j < n; j++)
        {
            len = j - i + 1;
            arr = (int *)malloc(len * sizeof(int));
            memcpy(arr, nums + i, len * sizeof(int));
            if (sort(arr, len))
            {
                for (k = 1; k < len; k++)
                {
                    if (arr[k] != arr[k - 1] + 1)
                        break;
                }
                if (k == len)
                {
                    //printf("[%d, %d]\n", i, j);
                    count++;
                }
            }
            free(arr);
        }
    }

    free(nums);
    printf("%I64u\n", count);
    return 0;
}
一派護法 十九級
2樓 發表于:2016-3-18 22:34
详细记录 评测点序号评测结果得分CPU使用内存使用下载评测数据
1  正确  20.00  15ms  1.601MB  输入 输出  
2  正确  20.00  0ms  1.609MB  VIP特权  
3  正确  20.00  499ms  1.660MB  VIP特权  
4  运行超时  0.00  运行超时  1.683MB  VIP特权  
5  运行超时  0.00  运行超时  1.632MB  VIP特权 


得分60分
一派護法 十九級
3樓 發表于:2016-3-18 22:42
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*int sort(int *nums, int n)
{
    int i, j, temp;
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - i - 1; j++)
        {
            if (nums[j] == nums[j + 1])
                return 0;
            if (nums[j] > nums[j + 1])
            {
                temp = nums[j];
                nums[j] = nums[j + 1];
                nums[j + 1] = temp;
            }
        }
    }
    return 1;
}*/

int main(void)
{
    int i, j, k, n, *nums;
    int *arr;
    int len;
    unsigned long long count = 0;
    int min, max;
    
    scanf("%d", &n);
    nums = (int *)malloc(n * sizeof(int));
    for (i = 0; i < n; i++)
        scanf("%d", nums + i);

    for (i = 0; i < n; i++)
    {
        for (j = i; j < n; j++)
        {
            len = j - i + 1;
            /*arr = (int *)malloc(len * sizeof(int));
            memcpy(arr, nums + i, len * sizeof(int));
            if (sort(arr, len))
            {
                for (k = 1; k < len; k++)
                {
                    if (arr[k] != arr[k - 1] + 1)
                        break;
                }
                if (k == len)
                {
                    //printf("[%d, %d]\n", i, j);
                    count++;
                }
            }
            free(arr);*/

            min = max = nums[i];
            for (k = 1; k < len; k++)
            {
                if (nums[i + k] < min)
                    min = nums[i + k];
                if (nums[i + k] > max)
                    max = nums[i + k];
            }
            //printf("[%d, %d], [%d, %d]\n", i + 1, j + 1, min, max);
            if (max - min == j - i)
            {
                //printf("[%d, %d]\n", i + 1, j + 1);
                count++;
            }
        }
    }

    free(nums);
    printf("%I64u\n", count);
    return 0;
}
得分:
80分
一派護法 十九級
4樓 發表于:2016-3-18 22:45
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    int i, j, k, n, *nums;
    unsigned long long count = 0;
    int min, max;
    
    scanf("%d", &n);
    nums = (int *)malloc(n * sizeof(int));
    for (i = 0; i < n; i++)
        scanf("%d", nums + i);

    for (i = 0; i < n; i++)
    {
        min = max = nums[i];
        for (j = i; j < n; j++)
        {
            if (nums[j] < min)
                min = nums[j];
            if (nums[j] > max)
                max = nums[j];
            if (max - min == j - i)
                count++;
        }
    }

    free(nums);
    printf("%I64u\n", count);
    return 0;
}
得分:
100分
一派護法 十九級
5樓 發表于:2016-3-18 22:45
因此,根本不需要排序,直接减最大最小值就行了

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:217 回複數:4
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2016-3-18 22:45
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。