当前位置: 首页 > news >正文

习题6-2 S-Trees(树)

题意:

看白书

要点:

题目很简单,就是树的水题,我是直接建树然后模拟,第一次WA主要是最后想输出字符串但没有在末尾加上\0,编译器可以通过但会WA,下次要注意了。这题也可以不建树直接用下标法做,我看了一下网上的代码,确实简单多了


1.建树+模拟

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int tree[10000],rule[10];
char leaf[10000],out[10];
int n;

void search()
{
	int num,i,j,k;
	char s[10];
	scanf("%d", &num);
	for (i = 0; i < num; i++)
	{
		scanf("%s", s);
		for (j = 0; j < strlen(s); j++)
		{
			int x = rule[j+1];
			for (k = pow(2, x-1); k <= pow(2, x) - 1; k++)
				tree[k] = s[j] - 48;
		}
		int ans=1;
		for (j = 1; j <= n; j++)
		{
			if (tree[ans] == 0)
				ans = 2 * ans;
			else if (tree[ans] == 1)
				ans = 2 * ans + 1;
		}
		ans = ans - pow(2, n);
		out[i] = leaf[ans];
	}
	out[num] = '\0';//这里非常重要,第一次WA在这里
}

int main()
{
	int count = 1;
	while (~scanf("%d", &n), n)
	{
		memset(tree, 0, sizeof(tree));
		memset(rule, 0, sizeof(rule));
		int i,j;
		char layer[10];
		for (i = 1; i <= n; i++)
		{
			scanf("%s", layer);
			rule[layer[1] - 48] = i;//用rule存储真正的x的顺序
		}
		scanf("%s", leaf);
		search();
		printf("S-Tree #%d:\n", count++);
		printf("%s\n", out);
		printf("\n");
	}
	return 0;
}


2.下标法

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define maxn 15000

int main()
{
	int n,i,j,t=1;
	while (~scanf("%d", &n), n)
	{
		char leaf[maxn], xn[5], out[maxn];
		int layer[maxn];
		for (i = 1; i <= n; i++)
		{
			scanf("%s", xn);
			layer[i] = xn[1] - '0';
		}
		int num;
		char temp[maxn];
		scanf("%s%d", leaf, &num);
		for (i = 0; i < num; i++)
		{
			scanf("%s", temp);
			int k = 0;    //这里开始为0后面直接就等于leaf对应下标
			for (j = 1; j <= n; j++)
			{
				k = temp[layer[j]-1] == '1' ? (k << 1) + 1 : k << 1;//下标都是对应的,直接找就可以
			}
			out[i] = leaf[k];
		}
		out[num] = '\0';
		printf("S-Tree #%d:\n%s\n\n", t++, out);
	}
	return 0;
}



转载于:https://www.cnblogs.com/seasonal/p/10343835.html

相关文章:

  • centos6.x 抓取ssh登录的用户名和密码
  • Win7域用户实现User权限安装共享打印机
  • 用 gitbook 为项目写本书吧
  • WinCE6.0多国语言软键盘
  • Codeforces Round #344 (Div. 2) E. Product Sum 维护凸壳
  • 20145237《Java程序设计》第一周学习总结
  • ListView之SimpleAdapter
  • HashMap的工作原理及HashMap和Hashtable的区别
  • 多人聊天
  • mysql5.5.48 多实例配置及启动脚本
  • java 验证码生成
  • 五大常用算法之五:分支限界法
  • Swift 中的函数(上)
  • IOS开发中UILabel单行、多行文本计算高度、宽度的技巧
  • 盲修瞎练路漫漫,名师点化三日成[转]
  • 【comparator, comparable】小总结
  • Android系统模拟器绘制实现概述
  • Create React App 使用
  • MYSQL 的 IF 函数
  • Object.assign方法不能实现深复制
  • quasar-framework cnodejs社区
  • React-Native - 收藏集 - 掘金
  • redis学习笔记(三):列表、集合、有序集合
  • 从PHP迁移至Golang - 基础篇
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 分类模型——Logistics Regression
  • 经典排序算法及其 Java 实现
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 扑朔迷离的属性和特性【彻底弄清】
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 温故知新之javascript面向对象
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​TypeScript都不会用,也敢说会前端?
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (四)模仿学习-完成后台管理页面查询
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • . NET自动找可写目录
  • .gitignore
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core中的去虚
  • .NET Standard 的管理策略
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .net 验证控件和javaScript的冲突问题
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @EventListener注解使用说明
  • @软考考生,这份软考高分攻略你须知道
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式