博文

幻方的几种构造方法(2007-06-15 16:45:00)

摘要:幻方的要求:每一行,每一列,还有两条斜线上数字的和都相等.
(以下程序输入的 n 要求 n<30 并且 n 为奇数,输入0 结束) 构造 1 :
#include <stdio.h>
#include <string.h> void out(int n){
    int i,j,k,a[32][32];
    memset(a,0,sizeof(int)*32*32);
    j=n/2+1;
    a[1][j]=1;
    for(k=2;k <= n*n; k ++){
        i=i-1;
        j=j+1;
        if((i<1)&&(j>n)){
            i=i+2;
            j=j-1;
        }
        else{
            if(i<1)
                i=n;
  ......

阅读全文(2683) | 评论:0

迷宫搜索(2007-06-15 09:14:00)

摘要:/************************************************************************\
 迷宫路径搜索的过程显示,编译环境 : TC  Author  :  Deng Lanzhong / 江南孤峰
 Time    :  07--6--14
 Link me :  Email: lingdlz@163.com qq: 403324669
\************************************************************************/ #include <stdio.h>
#include <graphics.h>
#include <time.h>
#include <setjmp.h> #define MAZE_X  15   /* 迷宫宽度 */
#define MAZE_Y  10   /* 迷宫高度 */ char    maze[MAZE_Y+2][MAZE_X+2];  /* 定义迷宫 */
int      maze_x_s = (640 - MAZE_X * 20) / 2;   /* 迷宫起始横坐标 */
int      maze_y_s = (480 - MAZE_Y * 20)/2-40;  /* 迷宫起始纵坐标 */
int      search_result = 1;  /* 迷宫搜索结果 */
jmp_buf jumper;   /* 非局部跳转 */ /* 创建随机迷宫 */
void Crea......

阅读全文(3010) | 评论:0

打印DNA(2007-06-14 16:26:00)

摘要:打印 DNA 形状 问题描述 小强从小就喜欢生命科学,他总是好奇花草鸟兽从哪里来的。终于, 小强上中学了,接触到了神圣的名词--DNA.它有一个双螺旋的结构。这让一根筋的小强抓破头皮,“要是能画出来就好了” 小强喊道。现在就请你帮助他吧! ^_^ 输入 输入包含多组测试数据。第一个整数N(N<=15),N表示组数,每组数据包含两个整数a,b。a表示一个单位的DNA串的行数,a为奇数且 3<=a<=39。b表示重复度(1<=b<=20)。 输出 输出DNA的形状,每组输出间有一空行。 输入样例
2
3 1
5 4 输出样例
X X
 X
X X X   X
 X X
  X
 X X
X   X
 X X
  X
 X X
X   X
 X X
  X
 X X
X   X
 X X
  X
 X X
X   X // MY CODE 07-6-14 #include <stdio.h>
#include <string.h>
#define MAX 42 void SetMetrix(char m[][MAX], int a){
 int i,j;
 for(i = j = 0; i < a; i++,j++)
  m[i][j] = 'X';
 for(j=a-1,i=0; i < a; i++,j--)
  m[i][j] = 'X';
 for(i=0, j=a; i < a; i++)
  m[i][j] = '\0';
} void Print(char m[][MAX], int a, int b){
 int......

阅读全文(3551) | 评论:0

旅行家的预算(acm)(2007-06-08 08:17:00)

摘要:旅行家的预算 
Problem description
一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市 之间的距离D1、汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2、出发点每升汽油价格P和沿 途油站数N(N可以为零),油站i离出发点的距Di、每升汽油价格 Pi( i=l,2,...N)。计算结果四舍 五入至小数点后两位。如果无法到达目的地,则输出“No solution”。  
Input
输入数据的第一行是四个实数;
D1 C D2 P分别表示两个城市之间的距离,汽车油箱的容量,每升汽油能行驶的距离,出发点每升汽油价 格;
第二行是一个整数N,沿途的油站数。
第三行到第N+2,每一行是一个油站的基本信息描述,包括该油站离出发点的距离,该油站每升汽油的价 格。  
Output
输出到达目的城市的最小费用(四舍五入到两位小数),若不能到达目的城市则输出 No solution  
Sample Input
275.6  11.9   27.4  2.8
2
102.0  2.9
220.0   2.2
 
Sample Output
26.95
 
Problem Source
NOI // 测试用例
275.6  11.9   17.4  2.8
2
102.0  2.9
220.0   2.21
42.54 275.6  11.9   10.4  2.8
3
102.0  2.1
160.2  2.3
220.0  2.2
62.99
 
// mycode 2007--6--8 #include <stdio.h>
#include <float.h> typedef......

阅读全文(6685) | 评论:1

半数集问题(2007-06-06 20:24:00)

摘要:问题描述 问题描述:
给定一个自然数n,由n开始可以依次产生半数集set(n)中的数如下。
(1) n∈set(n);
(2) 在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;
(3) 按此规则进行处理,直到不能再添加自然数为止。
例如,set(6)={6,16,26,126,36,136}。半数集set(6)中有6 个元素。
注意半数集是多重集。 编程任务:
对于给定的自然数n,编程计算半数集set(n)中的元素个数。 输入 输入数据m行,每行给出一个整数n。(0〈n〈1000) 输出 输出只有m行,每行给出半数集set(n)中的元素个数。 输入样例
6
99 输出样例
6
9042 // mycode ,这里是“多重集”,非多重集有点麻烦 #include <stdio.h> int a[1000],aj; void get(int n){
 int i,j,k;
 for(i=aj+1; i <= n; i++){
  k = i/2;
  for(a[i]=j=1; j <= k; j++)
   a[i] = a[i] + a[j];
 }
 aj = n;
}
int main(){
 int n;
 aj = a[0] = a[1] = 1;
 while(scanf("%d",&n)!=EOF){
  if(n > aj)
   get(n);
  printf("%d\n",a[n]);
 }
 return 0;
}
......

阅读全文(4247) | 评论:0

24点速算(2007-06-06 14:13:00)

摘要:问题描述 速算24点相信绝大多数人都玩过。就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13)。要求只用'+','-','*','/'运算符以及括号改变运算顺序,使得最终运算结果为24(每个数必须且仅能用一次)。游戏很简单,但遇到无解的情况往往让人很郁闷。你的任务就是针对每一组随机产生的四张牌,判断是否有解。我们另外规定,整个计算过程中都不能出现小数。   输入 输入数据占一行,给定四张牌。 输出 如果有解则输出"Y",无解则输出"N"。 输入样例
A 2 3 6 输出样例
Y // my code 2007--6--6#include <stdio.h> #include <ctype.h> int Get(int j, int sum,int a[]){ if(j==4 && sum==24) return 1; else if(j==4) return 0; if(Get(j+1,sum+a[j],a)) return 1; if(Get(j+1,sum-a[j],a)) return 1; if(Get(j+1,sum*a[j],a)) return 1; if(Get(j+1,sum/a[j],a)) return 1; return 0; } int main(){ int i,j,k,t,a[4]; char d[4]; scanf("%c %c %c %c",&d[0],&d[1],&d[2],&d[3]); for(i = 0; i < 4; i++) a[i] = (isdigit(d[i]) ? d[i]-48 : d[i]-64); for(i = k = 0; k < 24; k++){ if(Get(1,a[0],a)){ printf("Y\n"); return 0; } j = (i >= 3 ? 0 : i+1); t = a[i]; a[i] = a[j]; a[j] = t; ......

阅读全文(3509) | 评论:2

排队买票(2007-06-05 22:51:00)

摘要:
问题描述 有M个小孩到公园玩,门票是1元。其中N个小孩带的钱为1元,K个小孩带的钱为2元。售票员没有零钱,问 这些小孩共有多少种排队方法,使得售票员总能找得开零钱。注意:两个拿一元零钱的小孩,他们的位置 互换,也算是一种新的排法。(M<=10)
输入 输入一行,M,N,K(其中M=N+K,M<=10). 输出 输出一行,总的排队方案。 输入样例
4 2 2 输出样例
8 /***********************************************
 题目可能不是很难,和排列组合有关,我的数学不是
 很好但这题能想到解法,不过却想了很久不知道怎么
 表达这个解法,开始用想用普通数组通过递归求解。
 没解决,最后终于想到了二叉树,呵呵,总算解决了
 不过遗憾,开始没考虑特殊数据 1 1 0 ,WA了一次
 题目 M<=10,以下程序不受此限制。
   --- 2007--6--5 ---
 ***********************************************/ #include <stdio.h>
#include <malloc.h> typedef struct tree{
 int i,dibs;
 struct tree *left,*right,*parent;
}TREE; TREE* GetTreeNode(void){
 TREE *temp;
 temp = (TREE*)malloc(sizeof(TREE));
 temp->dibs = temp->i = 0;
 temp->left = temp->right = temp->parent = NULL;
 return temp;
} void CreateTree(int n, int k, TREE **p){
&nb......

阅读全文(3295) | 评论:0

女人真正想要什么(2007-06-04 21:06:00)

摘要:大学时的一堂语文课上,老师讲了一个故事:年轻的亚瑟国王被邻国的伏兵抓获。邻国的君主被亚瑟的年轻和乐观所打动,没有杀他。并承诺只要亚瑟可以回答一个非常难的问题,他就可以给亚瑟自由。亚瑟有一年的时间来思考这个问题。如果一年的时间还不能给他答案,亚瑟就会被处死。   这个问题是:女人真正想要的是什么?   这个问题连最有见识的人都困惑难解,何况年轻的亚瑟,对于他这是个无法回答的问题。但总比死亡要好得多,亚瑟接受了国王的命题在一年的最后一天给他答案。   亚瑟回到自己的国家,开始向每个人征求答案:公主,妓女,牧师,智者,宫庭小丑。他问了所有的人,但没有人可以给他一个满意的回答。人们告诉他去请教一个老女巫,只有她才能知道答案。但是他们警告他,女巫的收费非常高,因为她昂贵的收费在全国是出名的。一年的最后一天到了,亚瑟别无选择,只好去找女巫。女巫答应回答他的问题,但他必须首先接受她的交换条件: 和亚瑟王最高贵的圆桌武士之一,他最亲近的朋友--加温结婚。亚瑟王惊骇极了,看看女巫:驼背,丑陋不堪,只有一个牙齿,身上发出臭水沟般难闻的气味,而且经常制造出猥亵的声音。他从没有见过如此不合谐的怪物。   他拒绝了,他不能强迫他的朋友娶这样的女人而让自己背付沉重的精神包袱。加温知道这个消息后,对亚瑟说:"我同意和女巫结婚,没有比拯救亚瑟的生命和保存圆桌更重要的事了。"   于是婚礼宣布了。女巫于是回答了亚瑟的问题:女人真正想要的是主宰自己的命运。   每个人都立即知道了女巫说出了一个伟大的真理,亚瑟的生命被解救了。   于是邻国的君主放了亚瑟王并给了他永远的自由。来看看加温和女巫的婚礼吧,这是怎样的婚礼呀! 亚瑟王在无法解脱的极度痛苦中哭泣。加温一如既往的谦和,而女巫却在庆典上表现出她最坏的行为:她用手抓东西吃,打嗝,**,让所有的人感到恶心,不舒服。   新婚的夜晚来临了:加温依然坚强地面对可怕的夜晚,走进新房。是怎样的景象在等待着他呀!一个他从没见过的美丽的少女半躺在婚床上!加温惊呆了,问她到底是怎么回事。   美女回答说,因为当她是个丑陋的女巫时加温对她非常的好,于是她在一天的时间里一半是她可怕的一面,另一半是她美少女的一面。那么加温想要她在白天或夜晚是哪一面呢?   多么残酷的问题呀!加温开始思考他的困境:在白天向朋友们展现一个美丽的女人,而......

阅读全文(2312) | 评论:2

马拦过河卒(2007-06-02 21:49:00)

摘要:马拦过河卒 时间限制:10000MS  内存限制:65536K
Total Submit:9 Accepted:3 问题描述 棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳 跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。
  棋盘用坐标表示,A点(0, 0)、B点(n, m)(n, m为不超过15的整数),同样马的位置坐标是需要给出的。现在要求你计算出卒从A点能够到达 B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。 输入 一行四个数据,分别表示B点坐标和马的坐标。(保证所有的数据有解) 输出 一个数据,表示所有的路径条数。 输入样例
6 6 3 3 输出样例
6 题目来源 // MY CODE (注意卒不能通过马所在的位置,象棋里是可以的) #include <stdio.h> struct node{
 int  right;
 int  down;
 int  x,y;
}stack[40]; struct horse{
 int x,y;
}horse[8]; int test(int x,int y,struct horse *h,int k){
 int i;
 for(i = 0; i < k; i++)
  if(h[i].x == x && h[i].y == y)
   return 1;
 return 0;
} int main(){
 int  xd,yd,xh,yh,i,k,m;
 int  b[] = {-2,-1,1,2,2,1,-1,-2};
 int  c[] = {1,2,2,1,-1,-2,-2,-1};  while(scanf("%d%d%d%d",&xd,&y......

阅读全文(6319) | 评论:1

回文(2007-06-02 12:58:00)

摘要:回文数(一) 时间限制:10000MS  内存限制:65536K
Total Submit:33 Accepted:10 问题描述 若一个数(首位不为0)从左到右读与从右到左读都是一样,这个数就叫做回文数,例如12521就是一个回 文数。
给定一个正整数,把它的每一个位上的数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则 停止,如果不是,则重复这个操作,直到和为回文数为止。给定的数本身不为回文数。
例如:87则有:
STEP1: 87+78=165
STEP2: 165+561=726
STEP3: 726+627=1353
STEP4: 1353+3531=4884
编写一个程序,输入M(12<=M<=100),输出最少经过几步可以得到回文数。如果在8步以内(含8步)不可 能得到回文数,则输出0。   输入 第1行一个正整数L,代表测试数据的组数。
接下来L行每行一个整数M(12<=M<=100),M本身不为回文数;   输出 输出L行,第i行对应输入数据的第i+1行,输出最少需要的步数;如果步数大于8,则输出0。 输入样例
3
12
87
89   输出样例
1
4
0
// my code #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
void revsStr(char *str){
 unsigned int i,j;
 char c;
 for(i = 0,j = strlen(str)-1; j > i; i++,j--){
  c = str[i];
  str[i] = str[j];
  str[j] = c;
 }
} int testStr(char *str)......

阅读全文(2781) | 评论:0