A Lucky 7 題意:一個三位數,判但是否出現數字7. 題解:簽到題。 代碼: #include<iostream> #include<algorithm> #include<cstring> #include<stdio.h> using namespace std; int main(){ ...
題意:一個三位數,判但是否出現數字7.
題解:簽到題。
代碼:
#include<iostream> #include<algorithm> #include<cstring> #include<stdio.h> using namespace std; int main(){ int N; cin>>N; while(N){ if(N%10==7){ cout<<"Yes"<<endl; return 0; } N=N/10; } cout<<"No"<<endl; return 0; }
題意:給定數字N,排除能被3或5整除的,將其餘點的數字相加即可。
題解:簽到題。
法一:
#include<iostream> #include<algorithm> #include<cstring> #include<stdio.h> using namespace std; #define ll long long ll num[10000005]={0}; void app(){ for(ll i=1;i<=10000005;i++){ if(num[i]==0){//沒有判斷 if(i%3==0||i%5==0){//判斷出一個不合格 for(ll j=i;j<=10000005;j=j+i){ num[i]=-1;//不能處理 } }else{ num[i]=i; } } } } int main(){ ll N; ll sum=0; app(); cin>>N; for(int i=1;i<=N;i++){ if(num[i]!=-1){ sum=sum+num[i]; } } cout<<sum<<endl; return 0; }
法二
#include <bits/stdc++.h> #define ll long long using namespace std; int main() { int n; scanf("%d",&n); ll ans=0; for(int i=1;i<=n;i++) { if(i%3==0||i%5==0) continue; ans+=i; } printf("%lld\n",ans); return 0; }
C - Sum of gcd of Tuples (Easy)
題意:題目給出數據N,求Σka=1Σkb=1Σkc=1 gcd(a,b,c)的和。
題解:數據範圍比較小,可暴力,前提是要知道三個數的最大公約數的求法。
代碼:
#include<iostream> #include<algorithm> #include<cstring> #include<stdio.h> using namespace std; int main(){ int k; cin>>k; int sum=0; for(int i=1;i<=k;i++){ for(int j=1;j<=k;j++){ for(int r=1;r<=k;r++){ int a=__gcd(i,j); sum=sum+__gcd(a,r); } } } cout<<sum<<endl; return 0; }
題意:這題的題意是給你一串由‘R’,'G','B'組成的字元串。從中取三個坐標(i,j,k)(1<=i<j<k<=N),要求你能找到對少對這樣的坐標符合一下兩個條件:
Sj≠Si,Sk≠Si,Sj≠Sk 。
j-i≠k-j。
題解:這一題的數據範圍比較大,暴力肯定會超時。因此肯定是有比較快的方法。
從正面算可能會超時,我們就從反面算,在這裡,我們將符合條件(一)的總數都求出來,然後減去不合符條件(二)且符合條件(一)的數量即可。
代碼:
#include<iostream> #include<cstring> #include<algorithm> #define ll long long using namespace std; int main() { int n; string s; cin>>n; cin>>s; ll r=0,g=0,b=0; for(int i=0; i<s.length(); i++) { if(s[i]=='R') { r++; } if(s[i]=='G') { g++; } if(s[i]=='B') { b++; } } ll ans=r*g*b; ll an=0; for(int i=0; i<s.length(); i++) { //這裡遍歷的是 它們之間的間距相同的字元 for(int j=i+1; j<n; j++) { int k=j+(j-i); if(k>n-1) { continue; } if(s[i]!=s[j]&&s[j]!=s[k]&&s[i]!=s[k]) {/*有 因為它們之中包含了 “每兩種之間互不相同” 這一條件 ,而符合這一條件的 已經在上面求出總數了,這裡是因為它們不符合條件(一) ,故在這裡最後我們要把他們減去*/ an++; } } } printf("%lld\n",ans-an); return 0; }