宁波工程学院[1409] 鼹鼠鼹鼠你不出来 大数处理 模拟 很好的题

  • 时间限制: 1000 ms 内存限制: 65535 K
  • 问题描述
  • 一只鼹鼠想要探索北方的一块草地,这块草地是一个无限大的方格矩阵,由于地鼠只会往前不会后退,所以他只会朝北或者东、西方向刨。由于刨过的地方已不是土地,所以不会再次进入这个方格。现在这只鼹鼠打算刨n步,它想要知道能有多少种刨的方案,你能帮他算算吗?注:只要有任何的不同,就算是不同的刨法。

  • 输入
  • 有多组输入,每组是一个整形n,代表刨的步数,1<= n <= 100。
  • 输出
  • 对于每组输入,输出总的方案数。
  • 样例输入
  • 1
    2
    
  • 样例输出
  • 3
    7
    
  • 提示
  • 来源
  • 小白菜

     
    思路 :  很明显  他只能往3个方向走  假设 他只能往 前 和 上下走   我们用箭头标注每一步从某处走到某处   假设上一步往前的个数为s3(下一步能走3个方向)  往上和往下的和为s2(下一步能走2个方向) 那么对于下一次 每个往前的可以为s2增加2个   每个 往上和往下的可以产生一个往前的      
    由此 可知  

      s3[i]=s2[i-1]+s3[i-1];
      s2[i]=s3[i-1]*2+s2[i-1];
      ans[i]=s2[i]+s3[i];
    本题的坑在于  用 int 会爆掉 用 long long会爆掉    用unsigned long long  也会爆掉 
    用unsigned long long 千万要注意 如果最大的数据看着不是负数并不代表不会爆掉 此时一定要多输入几个数 看看那些数是否爆掉 或者是否比最大数据对应的值更加大一些   做题一定要细心
     
    所以只有用大数去做了  注意 用大数并不难     大数不是很复杂 不要怕大数  就是普普通通的模拟 不要被它的面具吓到    看看拍出来后 多简单啊  自己可一定要征服大数 
     
    #include<string.h>
    #include<stdio.h>
    int s2[111][100],s3[111][100],ans[111][100];
    void solve( int str[],int ss[],int sss[])
    {
    	int i;
    	for(i=0;i<100;i++)
    	{
    		str[i]+=(ss[i]+sss[i]);
    		if(str[i]>=10) 
    		{
    			str[i+1]=str[i]/10;
    			str[i]=str[i]%10;
    		}
    	}
    }
    void solve2(int str[],int sss[],int ss[])
    {
    	int i;
    	for(i=0;i<100;i++)
    		sss[i]=sss[i]*2;
    	for(i=0;i<100;i++)
    	{
    		str[i]+=(sss[i]+ss[i]);
    		if(str[i]>=10)
    		{
    			str[i+1]=str[i]/10;
    			str[i]=str[i]%10;
    		}
    	}
    }
    void print(int s[])
    {
    	  int i;
          for(i=99;i>=0;i--)
    			if(s[i]!=0) break;
    	    while(i>=0)
    		{
    			printf("%d",s[i]);
    			i--;
    		}
    
    	printf("\n");
    }
    int main()
    {
    	int n,i;
    	s2[1][0]=2;
    	s3[1][0]=1;
    	ans[1][0]=3;
     	for(i=2;i<=100;i++)
    	{
            solve(s3[i],s2[i-1],s3[i-1]);
    		solve2(s2[i],s3[i-1],s2[i-1]);
    		solve(ans[i],s2[i],s3[i]);
    		/*a3[i]=a2[i-1]+a3[i-1];
    		a2[i]=a3[i-1]*2+a2[i-1];
    		ans[i]=a2[i]+a3[i];*/
    	}
    	while(scanf("%d",&n)!=EOF)
    	{
            print(ans[n]);
    	}
     	return 0;
    }

     
### 回答1: 别的特点实现不同的行为。 创建一个基础类Rodent,包含适用于所有啮齿动物的方法,如eat()、sleep()等。然后创建三个派生类Mouse、Gerbil和Hamster,别继承Rodent类,并覆盖其中的方法,以实现不同的行为。 例如,Mouse类可以覆盖eat()方法,实现吃奶酪的行为;Gerbil类可以覆盖sleep()方法,实现在地洞里睡觉的行为;Hamster类可以覆盖run()方法,实现在轮子上奔跑的行为。 这样,我们就可以通过创建不同的派生类,来实现不同种类啮齿动物的特点和行为。 ### 回答2: 啮齿动物是一类较为广泛的动物群体,包括老鼠、鼹鼠、大颊鼠等。在面向对象编程中,创建一个适用于这个群体的继承级结构很有必要。我们可以从基类开始,提供适用于所有啮齿动物的方法和属性,并在不同的派生类中根据其特点进行进一步的覆盖和扩展。下面是一个可能的实现: 基类(Rodent): - 成员变量: name(名称)、 age(年龄)、 gender(性别) - 方法: eat()、 sleep()、 run()、 makeSound() (这些方法都是抽象方法,在派生类中必须被覆盖实现) 派生类1 - Mouse: - 成员变量: tailLength(尾长) - 方法: eat()、 sleep()、 run()、 makeSound() (必须实现) - 覆盖方法: makeSound() (老鼠的叫声和其他啮齿动物不同,需要覆盖实现) 派生类2 - Gerbil: - 成员变量: burrowDepth(掘洞深度) - 方法: eat()、 sleep()、 run()、 makeSound() (必须实现) - 覆盖方法: run()(鼹鼠的奔跑方式和其他啮齿动物不同,需要覆盖实现) 派生类3 - Hamster: - 成员变量: cheekCapacity(颊囊容量) - 方法: eat()、 sleep()、 run()、 makeSound() (必须实现) - 扩展方法: storeFood() (大颊鼠有颊囊,可以储存食物,需要扩展实现) 通过以上的设计,我们可以很好地实现对不同啮齿动物的类,并且让它们有各自的特点和方法。在使用时,我们可以直接使用基类定义一个啮齿动物对象,或者使用派生类定义特定的对象。在对某个啮齿动物进行操作时,可以先根据其具体的类型转化为相应的派生类对象,这样可以更方便地调用到其特有的方法。 ### 回答3: 啮齿动物是一类包括老鼠、鼹鼠、大颊鼠等多种物种的动物。为了管理和组织这些啮齿动物,我们可以创建一个基础类 Rodent(啮齿动物),然后在此基础上创建不同的派生类,如 Mouse(老鼠)、Gerbil(鼹鼠)、Hamster(大颊鼠)等。下面就来具体析一下如何创建这个继承级结构。 首先,在基础类 Rodent 中,我们可以提供适用于所有啮齿动物的属性和方法,比如它们都有四条腿、尖牙、强壮的尾巴等特征,都能够啃咬食物、挖洞等。我们可以用以下代码表示: ```python class Rodent: def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender self.legs = 4 self.teeth = 'sharp' self.tail = 'strong' def eat(self): print(self.name + ' is eating.') def dig(self): print(self.name + ' is digging.') ``` 在以上代码中,我们定义了 Rodent 类,并初始化了该类的 name、age 和 gender 属性,同时设置了 legs、teeth 和 tail 的默认值。同时,我们还定义了 eat 和 dig 两个方法,别表示啮齿动物的吃和挖洞行为。 接下来,我们可以根据不同的物种创建不同的派生类。以老鼠为例,我们可以用以下代码表示: ```python class Mouse(Rodent): def __init__(self, name, age, gender): super().__init__(name, age, gender) self.legs = 4 self.teeth = 'very sharp' self.tail = 'long' def eat(self): print(self.name + ' is eating cheese.') def dig(self): print(self.name + ' is digging a hole in the ground.') ``` 在以上代码中,我们继承了 Rodent 类,并重写了其中的 legs、teeth 和 tail 属性。我们还重写了 eat 和 dig 两个方法,使其更符合老鼠的特点,比如老鼠会吃起司,会把洞挖在地下等。 同理,我们还可以创建其他啮齿动物的派生类,如鼹鼠和大颊鼠。在创建这些派生类时,我们可以按照它们与基础类 Rodent 的不同之处,覆盖一些基础类方法并定义一些新方法。比如,假设我们针对大颊鼠创建了以下派生类: ```python class Hamster(Rodent): def __init__(self, name, age, gender): super().__init__(name, age, gender) self.legs = 4 self.teeth = 'rounded' self.tail = 'short' def eat(self): print(self.name + ' is eating seeds.') def dig(self): print(self.name + ' is burrowing in its cage.') def run_on_wheel(self): print(self.name + ' is running on its exercise wheel.') ``` 在以上代码中,我们同样继承了 Rodent 类,并覆盖了 legs、teeth 和 tail 属性,以及 eat 和 dig 两个方法。此外,我们还定义了一个新方法 run_on_wheel,因为大颊鼠经常会在小轮盘上跑步锻炼。 这样,我们就创建了一个啮齿动物的继承级结构,使得我们可以更好地管理和组织这些动物。在基础类中,我们提供了适用于所有啮齿动物的属性和方法,在派生类中,我们则可以根据不同的物种进行细致的定义和重写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值