void-man

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2011年4月14日

摘要: 题目意思就是从2开始一次把其倍数的号码给踢掉,并且踢掉一次后对号码重新按1,2,3依次排序然后再次踢人然后问你最后不被踢掉数的序列,第n个是几刚开始我题目理解错了,以为是序列一直不边,就直接用筛法求出素数,然后压入一个数组,结果wa,后来才知道是踢掉后重拍了既然重拍就设计一个标记数组,用来标记是否被踢掉 1 #include <stdio.h> 2 #define N 35000 3 int main(){ 4 int arr[N]={0}; 5 int lucky[N]; 6 int i,j,k,n; 7 n = 0; 8 for (i=2;i<N;i++) 9 {10 i 阅读全文
posted @ 2011-04-14 23:40 void-man 阅读(177) 评论(0) 推荐(0)

摘要: 题目大意,给出一个网格的长m和宽n,然后让你求出从左下角到右上角的走法的种类...这题高中时候做过,就是 组合数学,总共需要走m+n步,从这里面选出m步来走长的m步,即可 1 #include <stdio.h> 2 double c(double m,double n) 3 { 4 double a=1; 5 if(n>=m) 6 for(int i=1;i<=m;i++) 7 a=a*(n+i)/i; 8 else for(int i=1;i<=n;i++) 9 a=a*(m+i)/i;10 printf("%.0lf\n",a);11 1 阅读全文
posted @ 2011-04-14 23:16 void-man 阅读(122) 评论(0) 推荐(0)

摘要: 题目给出如图所示的一个值,然后按照右图的值找出在左图的坐标很容易,但是规律很难找,我是copy别人代码,看了恍然大悟,就是分情况用if来判断 1 #include<stdio.h> 2 #include<stdlib.h> 3 int a[100005][5]; 4 int main() 5 { 6 int n; 7 a[1][1]=0; 8 a[1][2]=0; 9 a[2][1]=0; 10 a[2][2]=1; 11 //找到规律直接循环递归输出就ok 12 for(int i=3;i<=100000;i++) 13 { 14 if(a[i-1][1]< 阅读全文
posted @ 2011-04-14 23:07 void-man 阅读(135) 评论(0) 推荐(0)

摘要: 给出一个布尔矩阵,由0,1组成,要求每行每列的和都为偶数,如果不满足,改动某一个位置状态可行的话就输出此位置,否则输出错误,如果不用改动就满足就输出ok。。。想法依然简单,我想的是输入数据时候就统计各行格列的和,用b[][]来存储,然后依次找出行列中和为奇数的个数,如果某个行或者列的统计个数等于n,矩阵长度,那么就是说此时没有可以有列或者行可以与此更改,就是错误,感觉这里可以再优化 1 #include <stdio.h> 2 int main() 3 { 4 int n,a[100][100]; 5 while(scanf("%d",&n)!=EOF, 阅读全文
posted @ 2011-04-14 22:51 void-man 阅读(206) 评论(0) 推荐(0)

摘要: 欧几里德算法int Gcd(int a, int b) { if(b == 0) return a; return Gcd(b, a % b); } //当然你也可以写成迭代形式: int Gcd(int a, int b) { while(b != 0) { int r = b; b = a % b; a = r; } return a; }Stein算法 欧几里德算法是计算两个数最大公约数的传统算法,他无论从理论还是从效率上都是很好的。但是他有一个致命的缺陷,这个缺陷只有在大素数时才会显现出来。 考虑现在的硬件平台,一般整数最多也就是64位,对于这样的整数,计算两个数之间的模是很简单的。对 阅读全文
posted @ 2011-04-14 14:04 void-man 阅读(570) 评论(0) 推荐(0)

摘要: 给出一个有限循环小数的一部分,然后让你计算出分数....因为没有指定循环部分,题目要求所给的结果中分母最小的那一个这题比较繁琐,需要一个一个去枚举,然后比较出分母最小的那一个,因此需要两层循环去计算非递归部分和递归部分#include<iostream>#include<stdio.h>#include<math.h>#include<string.h>using namespace std;long long gcd(long long a, long long b){ if(a<b)//arrange so that a>b { 阅读全文
posted @ 2011-04-14 13:51 void-man 阅读(455) 评论(0) 推荐(0)

摘要: 为了省赛等等之类的,我需要系统地做题,而不是盲目的刷水题,现在阶段,开始整理下哈工程oj上的数论部分题目 阅读全文
posted @ 2011-04-14 13:28 void-man 阅读(198) 评论(0) 推荐(0)

摘要: 首先给出一个数n,2-9代表接下来两个数的进制,然后给出两个数,一个是1000位,是被除数,另外一个是10位,是除数,让你求出两数相除的余数输出,并且是n进制的...这题是很久以前做的,但是每一点思路,但是学了大数相除后感觉简单多了,不用考虑商,只用求余就行由于给出的除数是10位,所以可以把他的十进制求出来用int k存储,然后利用大数求余的公式,把被除数依次按位求余mod=mod*n+(chu[i]-'0');mod=mod%k 注意此处乘的是n不是10,因为被除数本身不是十进制的最后得出的k是十进制的,然后再转换回n进制的即可......由于没有考虑余数是0情况,所以wa一 阅读全文
posted @ 2011-04-14 13:26 void-man 阅读(295) 评论(0) 推荐(0)