摘要:#include<stdio.h>#include<string.h>int main( ){ char str[1024] = {0}; while( ( gets( str ) ) ) { int i = 0; while( str[i] ) { if( str[i] >= 'A' && str[i] <= 'Z' ) str[i] += 32; ++i; } printf( "%s\n",str ); memset( str,0,sizeof( str ) ); } return 0;
阅读全文
摘要:这题题意是,把数换成二进制,然后从右边数起第一个为1的位置n,然后最小数就是2*( n - 1 ),开始还想用短除法,不过小白说这里可以用A&-A,就可以得出来;#include<stdio.h>int main( ){ int x,y,z,n; while( scanf( "%d",&x ) ,n ) { z = 1; int y = 0; while( y != 1 ) { y = x % 2; x = x / 2; z *= 2; } printf( "%d\n",z / 2 ); } return 0;} #inclu
阅读全文
摘要:#include<stdio.h>int cal( int x,int y ){ return y ? cal( y , x % y ) : x;//求最大公约数}int main( ){ int x,y,z; while( scanf( "%d%d",&x,&y ) ) { z = x * y / cal ( x , y ); printf( "%d\n",z ); } return 0;}
阅读全文
摘要:这题是刚学最小生成树的一入门题,其实就是求最小生成树,用结构体定义这棵树,到时候便于权值排序,输入后进行排序,让后再讲这些顶点连成一个集合,并在这过程中把各权值相加(因为这些权值已按递增排列,所以得出的集合时权值最小的),至于是否能保证畅通则只要看有几个根结点就可以了#include<stdio.h>#include<stdlib.h>#include<string.h>int set[1000],n,m,x,y,val;struct Ed{ int x,y,val; }e[10000];int cmp( const void *a,const void *
阅读全文
摘要:此题思路较简单,经多方分析后可得,两数的最小公倍数即为两数之积除以两数的最大公约数( 可用辗转相除法做,这里偷了以下懒),此题我采用的方法是先求两个两个一求,最后全部求出,还有记得用64位存贮,不然会WA的……#include<stdio.h>void cal( int n ){ long long a,i,b = 1; while( n-- ) { scanf( "%I64d",&a ); for( i = a < b ? a : b;; --i ) { if( a % i == 0 && b % i == 0 ) break;
阅读全文
摘要:剪花布条Time Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2457Accepted Submission(s): 1635Problem Description一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?Input输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少
阅读全文
摘要:KMP算法入门题 哥第一次写KMP惭愧啊,惭愧getnext写得蛋痛,后面的KMP部分更蛋痛。改了N久#include<stdio.h>#include<string.h>#define Max 1005char str[Max+5] = {0},ch[Max+5] = {0};int next[Max+5],count = 0,n;void getnext( ){ int i = 0,j = -1; next[0] = -1; while( ch[i] ) { if( j == -1 || ch[i] == ch[j] ) ++i,++j,next[i] = j; e
阅读全文
摘要:这题仔细想以下就知道其实最少的次数就是所有高于平均高度的墙都要移动一次就行了,只是需要注意输出格式,汗,PE了三次,最后求助大牛才解决#include<stdio.h>int main( ){ int num[1000],min,n,ave,r = 0; while( scanf( "%d",&n ),n ) { ave = min = 0; for( int i = 0; i < n; ++i ) scanf( "%d",&num[i] ),ave += num[i]; ave /= n; for( int i = 0
阅读全文
摘要:这题开始采用直接计算的方法,后来发现直接计算果断超时,最后选择打表
阅读全文
摘要:直接暴力,对输出示例比较感叹,没有完全读懂题意,前几次输出的都是POSITION,WA了几次
阅读全文
摘要:前几天在学校水题时就在看到了这个水题,开始觉得有点高深(特别是最下面有个提示,从汉字几内码考虑,表示没有机内码这个概念 ),所以一直没水,今天再看到这个题,不就时ASCII码吗?再偷瞄了DISCUSS一眼,发现我的思路没错故果断水了此题,还有一个汉字相当于两个英文字母,所以在遍历时遇到汉字要加2代码
阅读全文
摘要:此题找出关系即可设n微秒时a(n ) 为高能粒子个数,b (n )为低能粒子个数; 经分析可得 a (n ) = 3 * a(n - 1) + 2 * b (n - 1), b (n ) = a (n - 1) + b (n - 1);然后直接打表即可,还有要注意要用long long 型存储代码
阅读全文
摘要:水水#include<stdio.h>int main( ){ char str; int n,f = 0; while( scanf( "%c%d%*c",&str,&n ) ,str != '@' ) { f ? puts( "" ) : f = 1; for( int i = 0; i < n - 1; ++i ) { for( int j = 1; j <= n + i; ++j ) if( j == n - i || j == n + i )//仔细观察可以发现这个规律 printf( &
阅读全文
摘要:此题最重要的是要找规律,有两种方法来找出其规律,一种是唐聪的(速度快) f (n) = [ f (n - 1) + f (n - 2)]; 另一种是曹钦大侠的(普遍性较强 ) 下面是曹钦大侠的思路解析: 0 1 2 3 n E - E - E ……………… - O - F - O - E - F
阅读全文
摘要:这题水就不用说了 只是要注意在控制高和宽的时候都要加2代码
阅读全文
摘要:原以为这是一纯水题,就果断开了1000000了数组给它(1300多K),没想Memory果断超了,后来又用链表做(写了2000多K),再次无情的被Memory刷了,无耐百度一下,竟然发现别人的代码才300多B(表示我的有2000多B),发现自己的方法OUT了。 这段代码中最重要的是异或思想;相同的数异或后为0,0再和那个唯一的数异或(异或满足交换律,所以“礼物”,在前面出现和在最后出现没有区别,结果不变),结果即为那个不相同的数.杭电的测试数据太弱了,如果n为7, 3个1,3个2,一个3,结果就错了。(异或在本空间有介绍,如有不明,可以see一see 代码
阅读全文
摘要:这个题是数据结构教材上的一个经典例题,有两种方法,即数组或链表,这里我采用链表做的代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#include <stdio.h>#include <stdlib.h>typedef char Elemtype;typedef struct Lnode{ Elemtype e; struct Lnode *next;}Ln,*Link;void change ( Link L,i
阅读全文
摘要:此题与2163类似只要用一个比较即可,将这个字符串从两边比起(对称比较),只要有一个不相等,就将这个字符串标记为NO,然后在输出时判断一下即可,确实够水代码
阅读全文