级数求和:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sca = new Scanner(System.in); int k=sca.nextInt(); double sn=0; double i=1; do{ sn=sn+1/i; i+=1; } while (sn<=k); System.out.print((int)(i-1)); } }
选数:
#include <iostream> #include <sstream> #include <ios> #include <iomanip> #include <functional> #include <algorithm> #include <vector> #include <string> #include <list> #include <queue> #include <deque> #include <stack> #include <set> #include <map> #include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <climits> #include <cctype> using namespace std; #define XINF INT_MAX #define INF 0x3FFFFFFF #define MP(X,Y) make_pair(X,Y) #define PB(X) push_back(X) #define REP(X,N) for(int X=0;X<N;X++) #define REP2(X,L,R) for(int X=L;X<=R;X++) #define DEP(X,R,L) for(int X=R;X>=L;X--) #define CLR(A,X) memset(A,X,sizeof(A)) #define IT iterator typedef long long ll; typedef pair<int,int> PII; typedef vector<PII> VII; typedef vector<int> VI; //const int MAXN = 10010; //#define INF 0x3FFFFFFF int a[22],ans = 0; int n,k; bool ss(int x){ if(x == 1||x == 0) return 0; for(int i = 2;i*i<=x;i++) if(x%i == 0)return 0; return 1; } void dfs(int t,int sum,int l){ if(t == k){if(ss(sum))ans++;} else for(int i = l;i<=n;i++) dfs(t+1,sum + a[i],i+1); } int main() { cin>>n>>k; for(int i = 1;i <= n;i++)cin>>a[i]; dfs(0,0,1); cout<<ans<<endl; return 0; }
过河卒:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=30; ll ans[maxn][maxn]; int vis[maxn][maxn]; int dir1[8]={1,1,2,2,-1,-1,-2,-2}; int dir2[8]={2,-2,1,-1,2,-2,1,-1}; int main() { int n,m,cx,cy; cin>>n>>m>>cx>>cy; memset(vis,0,sizeof(vis)); vis[cx][cy]=1; for(int i=0;i<8;++i){ int a=cx+dir1[i]; int b=cy+dir2[i]; if(a>=0&&b>=0&&a<=n&&b<=n){ vis[a][b]=1; } } ans[0][0]=1; for(int i=0;i<=n;++i){ for(int j=0;j<=m;++j){ if(i){ if(vis[i][j]) ans[i][j]=0; else ans[i][j]+=ans[i-1][j]; } if(j){ if(vis[i][j]) ans[i][j]=0; else ans[i][j]+=ans[i][j-1]; } } } cout<<ans[n][m]<<endl; return 0; }