定義兩個大於2的偶數之間的距離,為這兩個數之間質數的個數。從小到大輸入n個大於2的偶數,輸出所有數兩兩之間距離的總和(應該有n*(n-1)/2個距離,輸出總和就好)。
第一行是輸入偶數的個數,最小為2,最大可能到幾萬。之後每行為乙個偶數,最小是4,最大可能是幾百萬,不重複的公升序排列。
輸出資料兩兩間距離的總和,這應該是乙個不小於0的整數。
樣例輸入
346
12
樣例輸出
6
開始我使用二重迴圈算出結果,即下面的**(vec 儲存的是相鄰兩個數之間的距離)
for (long i = 0; i < n - 1; ++i)
}
但這樣是會超時的。
題目中說給的順序是公升序的,這樣就可以去掉二重迴圈。先算出第乙個數到剩餘所有數的距離之和,然後減去 n - 1 個第乙個數到第二個數的距離,就是第二個數到剩餘所有數的距離之和。
c++ **如下:
#include #include #define maxn 10000010
using namespace std;
// notprime 陣列:1 為合數,0為質數
int notprime[maxn] = ;
int main() }}
long n;
scanf("%ld", &n);
/* 求出相鄰兩個數之間的距離,即之間質數的個數。用 vector 儲存 */
long num, lastnum;
scanf("%ld", &num);
vectorvec;
for (long i = 1; i < n; ++i)
}vec.push_back(count);
}/* 求出結果。
* 本可以使用二重迴圈求出,但那樣是會超時的。
* 這裡先求出第乙個數到剩餘所有數的距離之和,
* 然後將求出的和減去第乙個數到第二個數的距離乘以 n - 1 即為第二個數到後面所有數的距離。
* 按此思想即可算出結果 */
long sum = 0;
long tmp = 0;
for (long i = 0; i < n - 1; ++i)
tmp = sum;
for (long i = 1; i < n - 1; ++i)
printf("%ld\n", sum);
return 0;
}
求乙個字串的最大回文字首長度。回文是指正反方向讀起來都一樣的字串,比如「abcdcba」就是乙個回文。
乙個文字檔案,至少包含乙個位元組。每個位元組是乙個字元。最大長度可能有幾十萬位元組。
最大回文字首的長度。
樣例輸入
sogou
樣例輸出
1
直接求解即可。最開始按完整字串算,即從第乙個字元到最後乙個字元;接著從第乙個字元到倒數第二個字元……如果是回文,直接輸出,然後退出,這樣一定是最長的。
c **如下:
#include #include #define maxn 1000000
char str[maxn];
int main()
if (count > j - count)
}return 0;
}
只是感覺搜狗的筆試好簡單,而且不嚴格。程式設計題可以隨意切出不說,而且選擇題提交後還可以反覆修改……當然,我沒有去鑽這個空子。還有四十分鐘時,就交卷了。
上邊是原**,有幾個多餘的變數,精簡後如下
#include #include #define maxn 1000000
char str[maxn];
int main()
if (count > i - count)
} return 0;
}
2012搜狗校園招聘筆試題
include using namespace std int main unsigned char p unsigned char input int s 0 int temp sizeof input for int i 0 ichar v p i if v 0 s v a i printf d...
2012搜狗校園招聘筆試題
1 下面 中for迴圈共執行了多少次?unsigned short i,j for i 0,j 2 i j i 5,j 7 unsigned short占用2個位元組,當資料範圍到頭了 2 16 1 就又從0開始計數了,這個其實就是兩輛汽車行駛在乙個圓圈裡的汽車追及問題。乙個速度為5,乙個速度為7,...
2012搜狗校園招聘筆試題 1
最近發現了幾個公司招聘的筆試機試題,雖然是兩年前的,但是題目還不錯,所以做了做,下面給出自己對一些題的理解。問題描述 下面 中for迴圈共執行了多少次?unsigned short i,j for i 0,j 2 i j i 5,j 7 問題分析 首先,看到變數i和j都是無符號的整數,我們知道,無符...