從1(簽到)到5(防ak)標下難度
難度1,2的都應該會做,難度為3的多寫一道出來就說明學得不錯
a - 分拆素數和(難度 3)
首先篩法打出一萬以內的素數(學篩法可以戳這裡)
對於給定的n,要求出兩個不同素數相加等於n的組合數量,直接列舉2到n/2的所有數,如果這個數i是素數,再判斷n-i是不是素數,如果是的話,那就找到了乙個組合。為了防止出現重複的組合,只能列舉2~n/2而不是2~n
#include
#include
#include
#define maxn 10005
//素數篩法
int is_prime[maxn];//是素數的標記為0
void prime()//篩法打表}}
}int main()
return
0;}
b - 求平均成績(難度 3)
開乙個浮點型矩陣,橫行儲存乙個學生的各科成績,縱列儲存乙個學科的各學生成績。
每橫行末尾儲存該學生的各科平均成績,沒縱列末尾儲存該科目各學生平均分。
坑點:兩個數之間有空格,末尾沒有空格,一組資料全部輸出後再輸出空行
#include
#include
#include
#include
#include
using
namespace
std;
int main()
num[i][m+1]=num[i][m+1]/(m*1.0);//行尾記錄某一學生各科平均分
}for(int j=1; j<=m; j++)
num[n+1][j]=num[n+1][j]/(n*1.0);//列尾記錄某一課程所有學生的平均分
}int result=0;//記錄所有科目均超過該科目所有學生平均分的學生數量
for(int i=1; i<=n; i++)
}if(flag==0)
result++;
}for(int i=1; i//注意空格輸出
printf("%.2lf ",num[i][m+1]);
printf("%.2lf\n",num[n][m+1]);
for(int j=1; jprintf("%.2lf ",num[n+1][j]);
printf("%.2lf\n",num[n+1][m]);
printf("%d\n\n",result);
}}
c - 手機短號(難度 1)
實力簽到題,花式做法很多
#include
#include
#include
int main()
return
0;}
d - 找單詞(難度 5)
防ak難題,做不出不要急,以後學了動態規劃或者組合數學就可以做了
先給出動態規劃的解法(動態規劃不會?下個月再學都不遲)
dp[i][j]代表前i個字母組合出j價值的方法數量是dp[i][j]
狀態轉移方程:dp[i][j]=dp[i-1][j],dp[i][j]+=dp[i-1][j-i*k];
還可以用組合數學中構造母函式的方法,這裡先不講,等學過組合數學自然就會了。
#include
#include
#include
int main ()
int ans=0;
for (int i=1; i<=50; i++)
ans+=dp[26][i];
printf("%d\n",ans);
}return
0;}
e - 夾角有多大(題目已修改,注意讀題)(難度 3)
秒針會影響分針,分針會影響時針,時針注意轉化為十二小時制
#include
#include
int main()
return
0;}
f - 查詢最大元素(難度 2)
接收完資料後,遍歷一遍字串找到最大字元並記錄,再遍歷輸出時檢測輸出的當前字元是否為最大字元,如果是最大字元就再多輸出(max)
#include
#include
#include
int main()
printf("\n");
}return
0;}
#include
#include
#include
//同餘定理
//(a%c+b%c)%c==(a+b)%c
int main()
return
0;}
h - 夾角有多大ii(難度 2)
純計算幾何,不會做的問高中數學課代表
下面的**僅供參考
#include
#include
#define pi 3.1415926
int main()
return
0;}
i - 整數解(難度 2)
對於x+y=n,x*y=m,可以消元帶入化簡為一元二次方程,然後利用求根公式判斷得到的結果是否合法。
懶省勁的我直接暴力列舉,什麼求根公式,好麻煩。
#include
#include
//還可套公式
int main()
}flag==true?printf("yes\n"):printf("no\n");//這是三目運算子
}return
0;}
j - 漢諾塔iii(難度 4)
輕度防ak的簡單動規,其實自己也可以遞迴推出來的。
對於只有1個圓盤,很明顯需要移動3次
對於只有2個圓盤,很明顯需要移動3*1+2次
對於只有3個圓盤,很明顯需要移動3*(3*1+2)+2次
如果用dp[i]代表有i個圓盤時需要移動的次數為dp[i]
對於只有n個圓盤,需要dp[n-1]*3+2次
狀態轉移方程:dp[1]=3,dp[n]=dp[n-1]*3+2
#include
#include
#include
#define maxn 10005
//簡單動規
//狀態轉移方程:dp[1]=2,dp[n]=dp[n-1]*3+2
int main()
return
0;}
NYIST 2017大一新生第二次周賽題解
題目鏈結 for迴圈遍歷 找到數字個數 include includechar str 10000000 int main printf d n sum return 0 b 親和數 include include includeint main sum1 n for int i 1 i sqrt ...
NYIST 2017大一新生第四次周賽題解
密碼 nyistacmtc 貪心問題,對結束時間從小到大排序,先以第乙個結束時間右端點,然後遍歷後面的,如果有開始時間比端大於或等於的,那就更新一下端點 include include include using namespace std struct stu a 110 bool cmp stu...
大一新生該學的
看到老師讓給新入學學弟們點經驗。1.別為了適用而學習。因為你暫時還不知道你以後的職業,還不能規劃自己的職業道路。所以一定要面廣,也不要太鑽研,已理解和了解為主。2.鍛鍊自己的能力,提高個人素質。這是你終身適用的。在以後的道理中,你更主要的是跟人在打交道。3.經歷大學該經歷的。去看看10個或100大學...