摘要: Problem Description有如下方程:Ai = (Ai-1 + Ai+1)/2 - Ci (i = 1, 2, 3, .... n). 若给出A0, An+1, 和 C1, C2, .....Cn. 请编程计算A1 = ?Input输入包括多个测试实例。 对于每个实例,首先是一个正整数n,(n <= 3000); 然后是2个数a0, an+1.接下来的n行每行有一个数ci(i = 1, ....n);输入以文件结束符结束。Output对于每个测试实例,用一行输出所求得的a1(保留2位小数).Sample Input1 50.00 25.00 10.00 2 50.00 25. 阅读全文
posted @ 2012-08-14 15:54 zhtzhl 阅读(154) 评论(0) 推荐(0)
摘要: Problem Description输入一个十进制数N,将它转换成R进制数输出。Input输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。Output为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。Sample Input7 2 23 12 -4 3Sample Output111 1B -11【数制换算的一般方法】把r进数转换成十进制数,只要把r进制数写成r的各次幂的和的形式。然后按十进制计算结果。(这里r是大于1的自然数) 例如: (2 阅读全文
posted @ 2012-08-09 19:56 zhtzhl 阅读(350) 评论(0) 推荐(0)
摘要: 题目大意:一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些上升的子序列(ai1, ai2, ..., aiK),这里1 <= i1 < i2 < ... < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8).你的任务,就是对于给定的序列,求出最长上升子序列的长度。法一:O(n^2)思路:转 阅读全文
posted @ 2012-08-03 20:28 zhtzhl 阅读(676) 评论(0) 推荐(0)
摘要: 两个地方要注意:1、输入t之后要getchar(),否则输入的第一个字符串就是回车,结果为0.关于gets()输入函数,遇到\n,会把\n当作\0结束。遇到空格则会把空格读入该字符串中。2、判断是否为数字时,s[i]<9时9是字符,所以要加单引号。#include<stdio.h>int main(){int t,i,count;char s[1000];scanf("%d",&t);getchar();while(t--){gets(s);count=0;for(i=0;s[i]!='\0';i++){if('0' 阅读全文
posted @ 2012-08-01 21:18 zhtzhl 阅读(255) 评论(0) 推荐(0)
摘要: 这道题很简单,却在这写解题报告。1、可以先输入一个值,赋给max和min,然后再去求最小值和最大值。因为自己之前max=0,min=100,这种方法不好2、输入格式很重要。首先要确定是什么格式,其次是符号别弄错,就像刚开始a用%d,结果这个数据就读不进了。3、看了html,觉得有些话很有用。#include <stdlib.h>void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) );这是排序函数。如:int cmp(const double *a, co 阅读全文
posted @ 2012-08-01 13:52 zhtzhl 阅读(189) 评论(0) 推荐(0)
摘要: 这道题虽简单但一直出问题。。问题在于。。。两层for循环都用了i做循环变量,但是这两者所代表的意义是不一样的。。所以只要两者的循环变量不一样即可。另外,这道题计算sum时可用递归double f(int n){if (n == 0)return 0;else if (n % 2 == 1)return f(n - 1) + 1.0 / n;elsereturn f(n - 1) - 1.0 / n;}也可用条件语句简写double f(int n){return n ? f(n - 1) + ((n & 1) ? 1.0 : -1.0) / n : 0;}#include<std 阅读全文
posted @ 2012-07-28 20:55 zhtzhl 阅读(189) 评论(0) 推荐(0)
摘要: 一、输入:1、while (scanf("%d", &n) , n)//表示只有当n=0时输入结束。2、while(m--&&scanf("%d",&n))//表示m为多少值就输入几个n。3、关于gets()输入函数,遇到\n,会把\n当作\0结束。遇到空格则会把空格读入该字符串中。二、输出:1、printf(count++?“ %d”:"%d",i)//表示如果count为0则执行“%d”,否则执行“ %d”。该种情况用于不知道什么时候输出结束,而且对输入格式有要求,即输出的每两个数字之间有空格但最后 阅读全文
posted @ 2012-07-27 20:29 zhtzhl 阅读(228) 评论(0) 推荐(0)
摘要: 这道题不难,但是自己用switch,很烦参考码中有个不错的办法 #include <math.h>#include <stdio.h>#define lev(n) ((n % 4 == 0 && n % 100 != 0) ||( n % 400 == 0))//((n % 4 == 0 && n % 100 != 0) ||( n % 400 == 0))的值是1或0.int main(void){ int y, m, d, i, s; int month[2][13] = { {0, 31, 28, 31, 30, 31, 30, 3 阅读全文
posted @ 2012-07-27 19:56 zhtzhl 阅读(132) 评论(0) 推荐(0)
摘要: 这道题很简单,但却值得写一下结题报告。因为:1、当定义了字符后,可直接a>b,否则若用'a'>'b',则说明是a本身这个字符,而不是变量了2、三个比大小,顺序很重要,先是a与b比,然后是a与c比,最后是b与c比。这里的交换如a与b,是指a与b的大小变了,交换了a与b的值。因为a与b是变量,而不是指交换过后a与b的位置也变了,所以输出时是a、b、c的顺序。#include<stdio.h>int main(){char a,b,c,t;while(scanf("%c%c%c",&a,&b,&c)! 阅读全文
posted @ 2012-07-27 18:34 zhtzhl 阅读(338) 评论(0) 推荐(0)
摘要: #include<vector>#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;#define Min(a,b) a>b?b:a#define M 10010 //题目中可能的最大点数vector <int> Edge[M]; //图用邻接表表示int STACK[M],top=0; //Tarjan 算法中的栈bool InStack[M]; //检查是否在栈中int DFN[M] 阅读全文
posted @ 2012-07-27 18:25 zhtzhl 阅读(236) 评论(0) 推荐(0)