PRoblem:A
Time Limit:1000ms
Memory Limit:65536K
Description 在NEFU校園內,有一棟丹青樓,總共有17?777?777?777層,編號從-?8?888?888?888 到8?888?888?888。尤其是,這里有0層,即在-1層與1層之間。 有一個觀點存在于NEFU學生心中,那就是數字‘8’是幸運數字。而且,如果一個整數里面至少包含一個數字‘8’那么這個整數就是幸運的,即在這樓層考試,你就肯定不會掛科。例如,8,-180,808這些都是幸運數字,42,-10這些不是。 那么,你即將在丹青樓參加一場考試,考場樓層讓你選。你現在在a層,你需要找一個最小的正整數b,你往上再走b層就可以到達為幸運數字的樓層,從而確保這場考試不掛。
Input 輸入為一個整數,即題干中所描述的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 由于參加數學考試時你沒有選對幸運樓層,數學肯定是掛了,現在你開始為開學前補考做準備。 現在你遇到了一個數學題,對于下面的這個方程,你要求出x(0?<?x?<?10^9)的所有整數解 x=b*S(x)^a+c 其中a,b,c是給定的值,函數S(x)求得是整數x上的所有數字之和。 現在,需要你來解決這道題。
Input 輸入只有一行,分別為題干中描述的a,b,c(1<=a<=5, 1<=b<=10000,-10000<=c<=10000)
Output 輸出有兩行,第一行為n,表示你找到了n組解,第二行為n個整數,即你找到的對于上述方程的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 現在給你一個正整數n(n<=10000),問你有多少組(p1,p2,p3)滿足p1<=p2<=p3,p1,p2,p3都是素數,且p1+p2+p3=n
Input 輸入只有一行,為n(n<=10000)
Output 輸出也只有一行,即所問有多少組(p1,p2,p3)
Sample Input 3 9 Sample Output 0 2
這道題之前會寫…..然后過了幾個星期后居然又忘記咋寫了…orz.. 寫錯是因為時間超時,我的想法一開始很簡單就是把1-n的素數全部存到數組中,然后三個循環把和為n的情況求出來…. 但是吧,這樣是超時的…..3個循環花費的時間貌似有點多呀。。 然后我看了其他題又想到了另一種想法,就是用兩層循環,n減去那兩個數,得到p3,判斷p3是不是質數,但是判斷它是不是質數的時候是在那兩重循環里的,所以時間花的很多,因此也行不通。。。。
#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; }}新聞熱點
疑難解答