poj1016:Numbers That Count

C++学习:继承中的派生类 文章目录继承概述派生类定义派生类中的构造函数派生类实现时注意事项protected限定符重定义成员函数访问重定义的基函数继承细节不继承函数派生类中的拷贝构造函数和赋值操作符派生类中的析构函数 继承概述 面对对象编程(OOP)是一种强大编程方式,提供了“继承”这种抽象的方式,这意味者,可以先定义并编译常规形式的类,再定义那个类的具体版本,并继承前一个类的所有功能。 继承就是基于一个类(称为基类)创建新类(派生类)的过程。例如类B从类A继承而来,也可以说A是父类,B是子类。 举一个例子来说,先定义一个基类Emp 阅读详情

模拟题

一些测试数据:

22 is self-inventorying
31123314 is self-inventorying
314213241519 enters an inventory loop of length 2
21221314 is self-inventorying after 2 steps
111222234459 enters an inventory loop of length 2
123456789 is self-inventorying after 5 steps
654641656 enters an inventory loop of length 2
2101400052100005496 enters an inventory loop of length 2
10000000002000000000 enters an inventory loop of length 3
333 is self-inventorying after 11 steps
1 is self-inventorying after 12 steps
99999999999999999999999999999999999999999999999999999999999999999999999999999999 can not be classified after 15 iterations
0000 enters an inventory loop of length 2
0001 is self-inventorying after 8 steps
0111 is self-inventorying after 8 steps
1111 is self-inventorying after 8 steps
123456789 is self-inventorying after 5 steps
456137892 is self-inventorying after 5 steps
123213241561 enters an inventory loop of length 2
543265544536464364 enters an inventory loop of length 2
5412314454766464364 is self-inventorying after 3 steps
543267685643564364 enters an inventory loop of length 2
5423434560121016464364 is self-inventorying after 3 steps




# include <stdlib.h>
# include <string>
# include <string.h>
# include <stdio.h>

char s[20][200];

int cmp (int i, int j) {
	int t = strlen(s[i]) > strlen(s[j]) ? strlen(s[i]) : strlen(s[j]);
	for (int x = 0; x < t; ++ x) {
		if (s[i][x] != s[j][x]) return 0;
	}
	return 1;
}

int check(int k) {
	for (int i = 0; i < k; ++ i) {
		if (cmp(i, k)) return i;
	}
	return -1;
}

int go (int k) {
	char t1[200];
	int t2[11];
	memset(t2, 0, sizeof(t2));
	for (int i = 0; i < (int)strlen(s[k]); ++ i) {
		++ t2[s[k][i] - '0'];
	}
	int cnt = -1;
	for (int i = 0; i < 10; ++ i) {
		if(t2[i] < 10 && t2[i] > 0) {
			t1[++ cnt] = (char) ('0' + t2[i]);
			t1[++ cnt] = (char) ('0' + i);
		}
		if (t2[i] > 9 && t2[i] < 100) {
			t1[++ cnt] = (char) ('0' + t2[i] / 10);
			t1[++ cnt] = (char) ('0' + t2[i] % 10);
			t1[++ cnt] = (char) ('0' + i);
		}

	}
	t1[++ cnt] = '\0';
	memcpy(s[k + 1], t1, sizeof(t1));
	if(k + 1 > 15) {printf ("%s can not be classified after 15 iterations\n", s[0]); return 0;}
	if (check(k + 1) > 0) {
		if(cmp(k + 1, k)) {
			printf ("%s is self-inventorying after %d steps\n", s[0], k);
			return 0;
		}
		else {
			printf ("%s enters an inventory loop of length %d\n", s[0], k + 1 - check(k + 1));
			return 0;
		}
	}
	else if (check(k + 1) == 0) {
		if(k == 0) {
			printf ("%s is self-inventorying\n", s[0]); 
			return 0;
		}
		else {
			printf ("%s enters an inventory loop of length %d\n", s[0], k + 1 - check(k + 1));
			return 0;
		}
	}
	
	go(k + 1);
	return 0;
}


int main () {
	memset (s, 0, sizeof(s));
	for (;;) {
		scanf ("%s", s[0]);
		if (s[0][0] == '-') return 0;
		go(0);
	}
	return 0;
}





咱们一起学C++ 第二百二十三篇之C++构造函数的调用规则与虚函数在其中的特殊表现 大家好!C++作为一门强大的编程语言,构造函数和虚函数是其中非常重要的概念。今天咱们就来深入探讨一下构造函数的调用规则,以及虚函数在构造函数中的特殊行为,希望通过这次学习,大家都能有所收获,咱们一起进步! 阅读详情

相关推荐

咱们一起学C++ 第二百零五篇之C++中的向上类型转换与拷贝构造函数

大家好呀!我一直觉得学习是一件很有趣的事,尤其是像C++这种功能强大又有点复杂的编程语言。在学习C++的过程中,我发现很多知识点都特别有意思,今天就想和大家一起分享一下C++中的向上类型转换与拷贝构造函数,咱们一起学习进步!

wj_rdk的博客 1442

POJ1016-Numbers That Count【字符串处理】

北大POJ1016-Numbers That Count【字符串处理】 解题报告+AC代码

C++将派生类赋值给基类(向上转型)

C++将派生类赋值给基类(向上转型) 在 C/C++ 中经常会发生数据类型的转换,例如将 int 类型的数据赋值给 float 类型的变量时,编译器会先把 int 类型的数据转换为 float 类型再赋值;反过来,float 类型的数据在经过类型转换后也可以赋值给 int 类型的变量。 数据类型转换的前提是,编译器知道如何对数据进行取舍。例如: int a = 10.9; printf("%d\n", a); 输出结果为 10,编译器会将小数部分直接丢掉(不是四舍五入)。再如: float b = 10;

ccc369639963的博客 452

POJ 1016 Numbers That Count

题目链接:http://poj.org/problem?id=1016

Saber 569

poj1016

Problem : Numbers That Count

DreamtaleL 484

POJ1016 Numbers That Count

Numbers That Count Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16942   Accepted: 5555 Description "Kronecker's Knumbers" is a little company that man

天堂人间 1318

POJ 1016(自总结数 字符串处理) 解题报告

POJ 1016(自总结数 字符串处理) 解题报告

Why So Serious? 1320

C++多继承(多重继承)详解

在前面的例子中,派生类都只有一个基类,称为。除此之外,也支持,即一个派生类可以有两个或多个基类。多继承的语法也很简单,将多个基类用逗号隔开即可。例如已声明了类A、类B和类C,那么可以这样来声明派生类D://类D新增加的成员D 是多继承形式的派生类,它以公有的方式继承 A 类,以私有的方式继承 B 类,以保护的方式继承 C 类。D 根据不同的继承方式获取 A、B、C 中的成员,确定它们在派生类中的访问权限。

2301_76460576的博客 861

基类与派生类对象之间的赋值问题

一、将派生类对象赋值给基类对象? 注意:这不同于将派生类对象赋值给基类的引用或者指针 请看如下代码: Base b; //基类对象 Derived d; //派生类对象 b=d; //赋值 这将使用哪一个运算符呢?赋值语句实际上会被转换为下面的语句: b.operator=(d); 其中左边的对象是基类对象,所以调用的是基类中的赋值运算符重载函数,右边的对象作为传入的参数。而实参与形参结合的过程实际上就是派生类对象赋值给基类对象的引用。所以,b=

weixin_43850474的博客 3801

构造函数的执行顺序---派生类构造函数 and 父类构造函数 and 成员对象构造函数

构造函数的执行顺序,派生类构造函数 and 父类构造函数 and 成员对象构造函数

cjc211322的专栏 1715

c++继承详解之一——继承的三种方式、派生类的对象模型

C++是OOP(Object Oriented Programming)语言,即面向对象编程语言。OOP的核心思想就是数据抽象(类的设计),继承和动态绑定。 类展现了C++的封装特性,即将具体的实现过程隐藏,只向外暴露公有接口,即数据抽象,通过数据抽象,我们可以将类的接口与实现分离,(即设计类)。 与C相比,类可以通过相互间的继承和派生形成层次结构,派生类继承了基类的数据结构和方法 [编译时]。 使

lixungogogo的博客 3万+

C++学习笔记——多继承机制下构造函数的调用顺序(1)

      多继承方式下派生类的构造函数必须同时负责该派生类所有基类构造函数的调用。       构造函数的调用顺序为:先调用所有基类的构造函数,再调用派生类中子对象类的构造函数(如派生类中的子对象),最后调用派生类的构造函数。     &...

piketuo的博客 5096

基于C/C++将派生类赋值给基类的详细讲解

评论“人生苦短,拒绝内卷!”就有可能获得实体书一本哦,快来参与吧!

阿玥的小博客 912

派生类的构造函数

派生类的数据成员由所有基类的数据成员与派生类新增的数据成员共同组成,如果派生类新增成员中包括其他类的对象(子对象),派生类的数据成员中实际上还间接包括了这些对象的数据成员。因此,构造派生类的对象时,必须对基类数据成员、新增数据成员和成员对象的数据成员进行初始化。派生类的构造函数必须要以合适的初值作为参数,隐含调用基类和新增对象成员的构造函数,来初始化它们各自的数据成员,然后再加入新的语句对新增普通

农村的我的专栏 752

派生类构造函数的定义

1.派生类构造函数的一般形式为: 派生类构造函数名(总参数表):基类构造函数名(参数表) { 派生类中新增加数据成员初始化语句 } 2.在建立一个对象时,执行构造函数的顺序是: a.派生类构造函数先调用基类构造函数; b.再执行派生类构造函数本身(即派生类构造函数的函数体) 3.在派生类对象释放时,先执行派生类析构函数,再执行其基类析构函数 转载于:https://www.c...

weixin_30945039的博客 534

C++继承机制下的构造函数分析

本篇博客深入探讨了C++中继承机制下的构造函数工作原理。通过分析基类和派生类构造函数的调用顺序、默认构造函数的作用及其重要性,揭示了在多层继承结构中构造函数如何按层次被正确执行的细节。文章提供了代码实例来说明构造函数在创建对象时的触发规则,并讨论了构造函数中可能出现的错误及解决方法。

weixin_35189483的博客 392

C++ Primer 面向对象编程 15.2 基类和派生类 virtual

写了一个小程序来复习 基类和派生类 知识 1.item_base.h #pragma once #include #include using namespace std; class item_base { public: explicit item_base( const string &isb = "base" , const double &pri = 1.0); /*

big_bit的博客 724

C++将派生类赋值给基类

在 C/C++ 中经常会发生数据类型的转换,例如将 int 类型的数据赋值给 float 类型的变量时,编译器会先把 int 类型的数据转换为 float 类型再赋值;反过来,float 类型的数据在经过类型转换后也可以赋值给 int 类型的变量。数据类型转换的前提是,编译器知道如何对数据进行取舍。输出结果为 10,编译器会将小数部分直接丢掉(不是四舍五入)。输出结果为 10.000000,编译器会自动添加小数部分。

shiwei0813的博客 362
上一篇: poj1014:Dividing
下一篇: poj1017装箱问题
atupal
博客等级 码龄15年 125粉丝 163原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值