題目例外友好,
有不懂的,直接留言,
目錄
卷王之爭
紙牌游戲
簽到時間
干飯時間
游戲時間
周賽榜單
沒有名字
三角圖形
卷王之爭
比較兩個分數大小;
法一:直接通分時要注意資料范圍,
#include <iostream>
int main()
{
long long a , b , x , y ;
scanf("%d%d%d%d",&a,&b,&x,&y) ;
a*= y ;
x*= b ;
if(a > x)
printf("H is juanwang!\n") ;
else if(a < x)
printf("T is juanwang!\n") ;
else
printf("We are juanwang!\n") ;
return 0;
}
法二:除法計算注意,double不能直接判等號,
#include <iostream>
#include <algorithm>
#include <cmath>
#define double long double
const double eps = 1e-20 ;
int dcmp(double x,double y){
if(fabs(x - y ) < eps) return 0 ;
if(x < y) return -1;
return 1 ;
}
int main()
{
double a, b , x , y ;
scanf("%d%d%d%d" ,&a ,&b ,&x ,&y) ;
double s = a/b ;
double u = x/y ;
if(dcmp(s,u) > 0)
printf("H is juanwang!\n") ;
else if(dcmp(s,u) < 0)
printf("T is juanwang!\n") ;
else
printf("We are juanwang!\n") ;
return 0 ;
}
紙牌游戲
算是一個簡單博弈吧;
例有兩種花色的紙牌:
新生第一次取走了第一種紙牌m張,則S學長取走另一種花色m張;
此后不管新生取走哪一種花色的紙牌,也不論取走多少張,S學長都會取走另一種花色的紙牌同樣多張;
這樣,最后一張紙牌一定是S學長取走的,
拓展到四種花色,也是同樣道理,
這樣的話,無論如何,結果都是S學長必勝,
#include <stdio.h>
int main()
{
int n ;
scanf("%d",&n) ;
printf("tql\n") ;
return 0;
}
簽到時間
這是一道簡單的高中數學題;
已知:二項式展開式的系數,奇數項之和等于偶數項之和,
選偶數個人,是:
選奇數個人,是:
則結果為:
二項式展開式得偶數項多一個 ;
則最后結果為 ;
如果,想不起來這個定理的話,建議寫幾個試試,找規律,
#include <stdio.h>
int main()
{
int n ;
scanf("%d",&n) ;
printf("-1\n") ;
return 0;
}
干飯時間
簡單貪心;
每次只能去買兩種東西,必須在第一種東西做好之前回來;
則,每次選取得兩個數字不能相等;
最終結果等于每次選擇的兩個數字的最大值再加和;
為了最后的時間加和最小,則需要讓每兩個時間中最小的那個時間值,盡可能的大;
做法:先排序,每次選擇兩個不同的數,消耗的時間為較大的那個數值;
#include <iostream>
#include <cstdio>
int a[1010], b[1010];
void Sort(int a[], int n)
{
for (int i = n - 1; i > 0; i--)
for (int j = 0; j < i; j++)
if (a[j] > a[j + 1])
{
int t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
Sort(a , n);
int ans = 0;
for (int i = n - 1; i >= 0; i--)
{
if (b[i])
continue;
ans += a[i];
for (int j = i - 1; j >= 0; j--)
{
if (!b[j] && a[j] < a[i])
{
b[j] = 1;
break;
}
}
}
printf("%d\n", ans);
return 0;
}
游戲時間
本場最簽到題;
每次回圈當沒有達到目標的話,天數加加,分數增長值加加,
#include <iostream>
#include <cstdio>
int main()
{
int n , k ;
scanf("%d%d",&n,&k) ;
int ans = 0 ;
int day = 0 ;
while(ans < n)
ans += k , k++ , day ++ ;
printf("%d\n" , day) ;
return 0 ;
}
周賽榜單
如果對每個t都過一遍1~n的話,時間復雜度達到了1e12,這樣的話時間超限,所以這個題得要先處理一下,
SO,這個只要把前綴和處理一下,這個題就變成了簽到題,
例:
原陣列:
前綴和 為陣列的前
項和
前綴和:
前綴和演算法能夠快速的求出某段區間的和;
出題人說:前綴和更深度的學習看這里,
#include <stdio.h>
int a[1000010] ;
int main()
{
int n ;
scanf("%d" , &n) ;
a[0] = 0 ;
for(int i = 1 ;i <= n ; i++)
{
int x ;
scanf("%d" , &x) ;
a[i] = a[i-1]+x ;//a[i]表示前i個人的分數的和
}
int t ;
scanf("%d" , &t) ;
while(t--)
{
int x ;
scanf("%d" , &x) ;
printf("%d\n" , a[x]) ;
}
return 0 ;
}
沒有名字
簡單分支;
依照題意可得,如下:
#include <iostream>
#include <cstdio>
int a[1000010] ;
int main()
{
int n;
scanf("%d" ,&n) ;
int ans = 0 , sum = 0 ;
while(n--)
{
int x , y ;
scanf("%d%d",&x,&y) ;
if(x > y)
{
if(x==40 && (y==10 || y==20))
sum += 5 ;
else
ans += (x-y) ;
}
else
{
if(y==40 && (x==10 || x==20))
ans += 5 ;
else
sum += (y-x) ;
}
}
printf("%d %d",ans ,sum) ;
return 0 ;
}
三角圖形
簡單模擬;
六根棍子拼出兩個三角形,
法一:列舉,列舉每種可能拼成三角形的情況,判斷即可;
#include <iostream>
#include <cstdio>
int is_right(int a , int b , int c)
{
if(c+b > a)
return 1 ;
return 0 ;
}
int main()
{
int a[10] ;
for(int i = 0 ; i < 6 ; i++)
scanf("%d", &a[i]) ;
int flag = 0 ;
for(int i = 0 ; i < 6 ; i++)
for(int j = i+1 ; j < 6 ; j++)
for(int k = j+1 ; k < 6 ; k++)
{
int b[5] ;
int c = 0 ;
for(int p = 0 ; p < 6 ; p++)
if(p != i && p != j && p != k)
b[c++] = a[p] ;
if(is_right(a[i] , a[j] , a[k])==1 && is_right(b[0] , b[1] , b[2])==1)
{
flag = 1 ;
break ;
}
}
if(flag == 0)
printf("No\n") ;
else
printf("Yes\n") ;
return 0 ;
}
法二:也是列舉
#include <iostream>
#include <cstdio>
int main()
{
int a[10] ;
for(int i = 0 ; i < 6 ; i++)
scanf("%d", &a[i]) ;
if(a[5] + a[4] > a[3] && a[2] + a[1] > a[0])
printf("Yes\n") ;
else if(a[5] + a[3] > a[2] && a[4] + a[1] > a[0])
printf("Yes\n") ;
else if(a[5] + a[2] > a[1] && a[4] + a[3] > a[0])
printf("Yes\n") ;
else if(a[5] + a[1] > a[0] && a[4] + a[3] > a[2])
printf("Yes\n") ;
else
printf("No\n") ;
return 0 ;
}
題解簡陋,有問題直接提;

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/347174.html
標籤:其他
