|  | 【试题】连号区间数 | 
                
          |   一派護法 十九級 | 
              #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;
 }
 | 
                
          |   一派護法 十九級 | 
              详细记录
评测点序号评测结果得分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分
 
 | 
                
          |   一派護法 十九級 | 
              #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分
 
 | 
                
          |   一派護法 十九級 | 
              #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分
 
 | 
                
          |   一派護法 十九級 | 
              因此,根本不需要排序,直接减最大最小值就行了             |