1030 完美数列 (25 分)(c语言)
生活随笔
收集整理的這篇文章主要介紹了
1030 完美数列 (25 分)(c语言)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一個正整數數列,和正整數?p,設這個數列中的最大值是?M,最小值是?m,如果?M≤mp,則稱這個數列是完美數列。
現在給定參數?p?和一些正整數,請你從中選擇盡可能多的數構成一個完美數列。
輸入格式:
輸入第一行給出兩個正整數?N?和?p,其中?N(≤105)是輸入的正整數的個數,p(≤109)是給定的參數。第二行給出?N?個正整數,每個數不超過?109。
輸出格式:
在一行中輸出最多可以選擇多少個數可以用它們組成一個完美數列。
輸入樣例:
10 8 2 3 20 4 5 1 6 7 8 9結尾無空行
輸出樣例:
8結尾無空行
#include <stdio.h> #pragma warning (disable:4996) int cmp(const void* a, const void* b); int arr[100000]; int main() {int N, p;scanf("%d%d", &N, &p);for (int cnt = 0; cnt < N; cnt++) {scanf("%d", arr + cnt);}qsort(arr, N, sizeof(int), cmp);int max = 0;for (int begin = 0, end = 0; end < N; begin++) {while (arr[end] <= 1L * arr[begin] * p && end<N ) {end++;}if (end - begin > max) {max = end - begin;}}printf("%d", max);return 0; } int cmp(const void* a, const void* b) {return *((int*)a) - *((int*)b); }我踩過的坑:
1.這里qsort函數N不要設成long long ,vs里面會報錯
2.這個子鏈最長的時候不一定是固定在M固定在數列最后一個元素的時候,比如設M無窮大,但前面的很小,也不能把m定在首元素,理由同上不過是m設極小值
3.內循環end必須小于N,因為我數組設的很大,如果,又初始化成0了,一旦乘積大于最后一個元素,就會不停跑下去,因為最大元素后面都是0
4.乘法注意溢出的問題,加個1lL*,將計算結果默認轉化成長整型
總結
以上是生活随笔為你收集整理的1030 完美数列 (25 分)(c语言)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1029 旧键盘 (20 分)(c语言)
- 下一篇: 1032 挖掘机技术哪家强 (20 分)