标签:
B.hdu2522 A simple problem
求小数循环节的思路可以看看这个链接
http://www.cnblogs.com/hxsyl/p/3330481.html
1/n的循环节最多有(n-1)个数,只要用长除法得到第一次余数重复,前面的的商就是答案
n也可以是负数
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> using namespace std; const int MAXN = 1e5+100; int mark[MAXN]; int ans[MAXN]; int top,l; void solve(int x){ memset(mark,0,sizeof mark); top = l = 0; int s = 1,t; mark[1] = 1; while(s){ t = s*10/x; s = s*10%x; ans[top++] = t; if(mark[s]){ break; } mark[s] = 1; } } int main() { int T; scanf("%d",&T); while(T--){ int n; scanf("%d",&n); if(n<0){cout<<"-";n = fabs(n);} if(n==1){ cout<<1<<endl; continue; } solve(n); if(n==1){ cout<<0<<endl; continue; } cout<<"0."; for(int i=0;i<top;i++)cout<<ans[i]; cout<<endl; } //cout << "Hello world!" << endl; return 0; }
D.poj3047 Bovine Birthday
求任意给定日期的是星期几
蔡勒公式套一下就可以了
#include <iostream> #include <cstdio> #include <cmath> using namespace std; typedef long long ll; /*计算任何日期为周几模板*/ int fun(int x,int y,int z){ if(y<3){ x-=1; y+=12; } int a = x/100,b = x-100*a; int w = a/4 - 2*a+b+b/4+(13*(y+1)/5)+z-1; w = (w%7+7)%7; return w; } int main() { /*for(int i=1;i<13;i++){ cout<<fun(2016,i,1)<<" "; } cout<<endl;*/ int x,y,z; while(scanf("%d%d%d",&x,&y,&z)!=EOF){ int w = fun(x,y,z); if(w==1)cout<<"monday"<<endl; else if(w==2)cout<<"tuesday"<<endl; else if(w==3)cout<<"wednesday"<<endl; else if(w==4)cout<<"thursday"<<endl; else if(w==5)cout<<"friday"<<endl; else if(w==6)cout<<"saturday"<<endl; else cout<<"sunday"<<endl; } //cout << "Hello world!" << endl; return 0; }
F.poj2603 Brave balloonists
10个数的乘积sa 的所有因子个数(包括它本身)
思路:先将一个数可以化做素数的乘积形式
比如60 = 2^2 * 3^1 * 5^1
这样‘2‘可以提供(0,1,2)个2,‘3‘可以提供(0,1)个3,‘5‘可以提供(0,1)个5
所以60的所有因子个数就是 (2+1)*(1+1)*(1+1),ps.如果不包括本身的化最后要减去1
先打素数表,标记每个素数的个数,然后就可以得到答案
这题也是上一次的校赛题。。。
#include <iostream> #include <cstdio> #include <cmath> using namespace std; const int MAXN = 1e4+100; int a[10]; int p[MAXN],vis[MAXN],num[MAXN]; int cnt; void isprime(){ cnt = 0; for(int i=2;i<MAXN;i++){ if(!vis[i]){ p[cnt++] = i; for(int j=i*2;j<MAXN;j+=i){ vis[j] = 1; } } } } int main(){ isprime(); // for(int j=0;j<5;j++)cout<<p[j]<<" "; // cout<<endl; for(int i=0;i<10;i++)scanf("%d",&a[i]); //int sum = 0; for(int i=0;i<10;i++){ int t = a[i],k; for(int j=0;j<cnt&&p[j]<=t;j++){ k = 0; if(t%p[j]==0){ while(t%p[j]==0){ t/=p[j]; k++; } num[j] += k; //cout<<p[j]<<" "; } } } int sum = 1; for(int j=0;j<cnt;j++){ if(num[j]){ sum *= (1+num[j]); sum %= 10; } } //sum = (sum-1+10)%10; cout<<sum<<endl; return 0; }
G.1563 Find your present!
题意:如果某个数只有奇数个,那这个数就是特殊数,输出这个数,本题应该只存在一个这样的数
可以用因为输入的数可能比较大,用数组下标表示的话会爆数组,可以用c++的map
还有一种方法是用异或 比如 3^5^3^4^4^4^4 最后结果就是3,将该序列异或,最后剩余的结果就是答案
#include <iostream> #include <cstdio> #include <cmath> using namespace std; const int MAXN = 2e2+100; int a[MAXN]; int main(){ int n; while(scanf("%d",&n)!=EOF&&n){ int ans = 0; for(int i=0;i<n;i++){ scanf("%d",&a[i]); ans ^= a[i]; } cout<<ans<<endl; } return 0; }
标签:
原文地址:http://www.cnblogs.com/EdsonLin/p/5734363.html