|
摘要:http://ac.jobdu.com/problem.php?cid=1039&pid=22一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。问题1:如果是寻找只有一个出现一次的数字,比较简单的,只要所有数字异或一次即可问题2:找出这两个只出现一次的数字,就要将所有的数字分成两堆,每堆个包含一个出现一次的数字:先把所有数字异或下得到一个数A,A的二进制中的某一位为1,这时就可以以所有数二进制某一位是否为1分成两堆,这是回到了问题一View Code #include<stdio.h>int a[1000009];int b[100
阅读全文
摘要:escription给出圆周上的若干个点,已知点与点之间的弧长,其值均为正整数,并依圆周顺序排列。 请找出这些点中有没有可以围成矩形的,并希望在最短时间内找出所有不重复矩形。Input第一行为正整数N,表示点的个数,接下来N行分别为这N个点所分割的各个圆弧长度Output所构成不重复矩形的个数思路:由于是一个圆,所以要用到类似循环的数组,将原来的数组增加n-1如n=4延长到1 2 3 4 1 2 3即可达到循环效果枚举即可View Code #include<stdio.h>int a[99];int main(){ int n,i,j; while(scanf("%d&
阅读全文
摘要:1 2 3 4 5 6 7 8 99 8 7 6 5,4 3 2 15 6 7,8 9,1 2,3 47 6,5,9,8,2,1,4,36,7,5,9,8,2,1,4,3多次倒序Input9 4Output8折中枚举,两种情况,右边的,左边的……View Code #include<stdio.h>int main(){ int n,x,y; scanf("%d%d",&n,&y); int add=0; while(n>=2) { x=n+1-y; if(x>(n+1)/2) { y=x-(n+1)/2; add+=(n+1)/2;
阅读全文
摘要:列方程可知,最小点一定在给定的某点上先排序后枚举计算某点的权值枚举可以由前面的推出后面的,不必重复计算View Code #include<stdio.h>#include<iostream>#include<algorithm>using namespace std;struct data{ double x; int p;}map[15099];int cmp(data a,data b){ return a.x<b.x;}int main(){ int n; scanf("%d",&n); int i; for(i=0
阅读全文
摘要:View Code #include<stdio.h>#include<math.h>bool prim(int z){ int i; int sz=sqrt(z*1.0); for(i=2;i<=sz;i++) { if(z%i==0) { return 0; } } return 1;}bool ji(int a){ int sa=sqrt(a*1.0); int i; for(i=2;i<=sa;i++) { if(prim(i)==1) { if(a%i==0) { if(prim(a/i)==1) return 1; } } } return 0;
阅读全文
摘要://注意用gets(a)是 scanf("%d",&tn);后用//getchar()时WA无语View Code #include<stdio.h>#include<math.h>int gcd(int max,int min){ if(min==0)return max; else gcd(min,max%min);}int main(){ int tn; char a[19]; scanf("%d",&tn); while(tn--) { scanf("%s",&a);//注意用g
阅读全文
摘要:产生素数表解决View Code #include <stdio.h>#include<math.h>bool su[20009];int suu[3009];int main(){ int n,i,j,add=0; for(i=2;i<=20000;i++) su[i]=0; for(i=2;i<=10000;i++) { for(j=2;j*i<=20000;j++) { su[i*j]=1; } } for(i=1;i<=20000;i++) { if(su[i]==0) { suu[add]=i; add++; } }//产生素数表 wh
阅读全文
摘要:View Code #include<stdio.h>#include<iostream>#include<algorithm>using namespace std;char a[29],b[29];bool cmp(char a,char b){ return a>b;//大到小 //使abc为中a为最高位与all->1枚举相符}int main(){ int n,t,i,j; while(scanf("%d%d",&n,&t)!=EOF) { getchar(); scanf("%c"
阅读全文
摘要:http://192.168.7.42/problemDetail.aspx?pid=1477前打表找规律后来对数字是一的进行统计如103对最高位开始统计若为0 ,则不处理若该位为1则总数加上后面的数:加上以1*a[i](相应表中数),03+1若为大于1的数 则乘以该数的最高位(如203 则 加上以2*a[i](相应表中数),再加上03+1,再加上100)再到低位执行直到个位数View Code #include<stdio.h>#include<math.h>int main(){ int a[10]={0,1,20,300,4000,50000,600000,700
阅读全文
摘要:View Code #include<stdio.h>char s[100009];bool hash[100009];int main(){ int a,b,i,j; int t; scanf("%d",&t); while(t--) { scanf("%d",&b); { if(b<0) { printf("-"); b=-b; } a=1; for(i=0;i<=b;i++) { hash[i]=0; } int add=1; int qian; qian=a/b; a=a%b; hash
阅读全文
摘要:注意是顺时针转!!!View Code #include<stdio.h>#define N 360bool a[5][N+N];int v[5];int main(){ int i,j; int n; while(scanf("%d",&v[0])!=EOF) { for(i=0;i<5;i++) { for(j=0;j<360;j++) { a[i][j]=0; } } int add=0; int fi,end; scanf("%d",&n); for(i=1;i<=n;i++) { scanf(&qu
阅读全文
摘要:有规律,每次乘i后,记录第i个乘数的结果,去掉右边的零后,取1000的余数保存,继续乘i+1……View Code #include<stdio.h>int main(){ int n; while(scanf("%d",&n)!=EOF) { int a=1,i; for(i=2;i<=n;i++) { a*=i; while(a%10==0) a/=10; a=a%1000; } printf("%d\n",a%10); }}
阅读全文
摘要:输出第N个丑数假设存在第k个丑数,然后想知道第k+1个丑数,可以通过枚举n个给定的质数与前k个丑数相乘,得出大于第k个丑数且最小的数,但n个给定的质数与前k个丑数相乘时显然会浪费时间,可以开pr[]数组保存第i个给定的质数已经乘到第几个丑数了思想:保存当前状态,避免重复计算……View Code #include<stdio.h>int a[109];int pr[109];int cou[1000009];int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF) { int i,j; for(i=
阅读全文
摘要:如果n==7,则从0枚举到222222(三进制)0看做是空格,1看做+,2看做减号-若果是1 2 3+4+5+6-7,则将其前三个数合成一个数123+4+5-7(方法是使shu[n]=3,for(1->7))View Code #include<stdio.h>#include<math.h>int shu[10];int fu[10];int bao[10];int main(){ int n; while(scanf("%d",&n)!=EOF) { int i,temp=0,first=0; for(i=1;i<=n-1;i
阅读全文
|