PRoblem:A
Time Limit:1000ms
Memory Limit:65536K
Description 在NEFU校園內(nèi),有一棟丹青樓,總共有17?777?777?777層,編號從-?8?888?888?888 到8?888?888?888。尤其是,這里有0層,即在-1層與1層之間。 有一個(gè)觀點(diǎn)存在于NEFU學(xué)生心中,那就是數(shù)字‘8’是幸運(yùn)數(shù)字。而且,如果一個(gè)整數(shù)里面至少包含一個(gè)數(shù)字‘8’那么這個(gè)整數(shù)就是幸運(yùn)的,即在這樓層考試,你就肯定不會(huì)掛科。例如,8,-180,808這些都是幸運(yùn)數(shù)字,42,-10這些不是。 那么,你即將在丹青樓參加一場考試,考場樓層讓你選。你現(xiàn)在在a層,你需要找一個(gè)最小的正整數(shù)b,你往上再走b層就可以到達(dá)為幸運(yùn)數(shù)字的樓層,從而確保這場考試不掛。
Input 輸入為一個(gè)整數(shù),即題干中所描述的a(-10^9<=a<=10^9)
Output 輸出只有一行,即所要求的b。
Sample Input 179 -1 18 Sample Output 1 9 10
Problem:B
Time Limit:1000ms
Memory Limit:65536K
Description 由于參加數(shù)學(xué)考試時(shí)你沒有選對幸運(yùn)樓層,數(shù)學(xué)肯定是掛了,現(xiàn)在你開始為開學(xué)前補(bǔ)考做準(zhǔn)備。 現(xiàn)在你遇到了一個(gè)數(shù)學(xué)題,對于下面的這個(gè)方程,你要求出x(0?<?x?<?10^9)的所有整數(shù)解 x=b*S(x)^a+c 其中a,b,c是給定的值,函數(shù)S(x)求得是整數(shù)x上的所有數(shù)字之和。 現(xiàn)在,需要你來解決這道題。
Input 輸入只有一行,分別為題干中描述的a,b,c(1<=a<=5, 1<=b<=10000,-10000<=c<=10000)
Output 輸出有兩行,第一行為n,表示你找到了n組解,第二行為n個(gè)整數(shù),即你找到的對于上述方程的n個(gè)解,且以升序排列。每個(gè)解都嚴(yán)格大于0且小于10^9。
Sample Input 3 2 8 1 2 -18 2 2 -1
Sample Output 3 10 2008 13726 0 4 1 31 337 967
Problem:C
Time Limit:1000ms
Memory Limit:65536K
Description 現(xiàn)在給你一個(gè)正整數(shù)n(n<=10000),問你有多少組(p1,p2,p3)滿足p1<=p2<=p3,p1,p2,p3都是素?cái)?shù),且p1+p2+p3=n
Input 輸入只有一行,為n(n<=10000)
Output 輸出也只有一行,即所問有多少組(p1,p2,p3)
Sample Input 3 9 Sample Output 0 2
這道題之前會(huì)寫…..然后過了幾個(gè)星期后居然又忘記咋寫了…orz.. 寫錯(cuò)是因?yàn)闀r(shí)間超時(shí),我的想法一開始很簡單就是把1-n的素?cái)?shù)全部存到數(shù)組中,然后三個(gè)循環(huán)把和為n的情況求出來…. 但是吧,這樣是超時(shí)的…..3個(gè)循環(huán)花費(fèi)的時(shí)間貌似有點(diǎn)多呀。。 然后我看了其他題又想到了另一種想法,就是用兩層循環(huán),n減去那兩個(gè)數(shù),得到p3,判斷p3是不是質(zhì)數(shù),但是判斷它是不是質(zhì)數(shù)的時(shí)候是在那兩重循環(huán)里的,所以時(shí)間花的很多,因此也行不通。。。。
#include<iostream>#include <stdio.h>#include <math.h>#include<string.h>#include<algorithm>using namespace std;int main(){ int n,i,j,len; int a[10000],b[10000]; while(cin>>n) { memset(b,0,sizeof(b)); for(int x=2,i=0; x<=n; x++) { if(x==2||x==3) { a[i]=x; i++; len=i; b[x]=1; } else { for(j=2; j<x; j++) { if(x%j==0) break; } if(j>=x) { a[i]=x; i++; len=i; b[x]=1; } } } int sum=0; for(int k1=0; k1<len; k1++) for(int k2=0; k2<len; k2++) { int k3=n-a[k1]-a[k2]; if(a[k1]<=a[k2]&&a[k1]<=k3&&a[k2]<=k3) { if(b[k3]==1) sum++; } } cout<<sum<<endl; }}新聞熱點(diǎn)
疑難解答