171022—素数完全分解的另外循环 & 剪刀石头布!

一.对昨天的素数完全分解做了小改动,试了试其他循环语句。
之前保留了一点想当然的想法,认为在原结构中(x在最后位置得出值)判断语句应该放在后边。
今天尝试了for语句和while,发现这想法纯属多余。
这里写图片描述
这时给x赋了个初值。而最后的语句空下。运行结果正常。
这里写图片描述
while语句,运行也正常。
P.S. 切记想当然和人为敏感。。

二.剪刀石头布。
这是书上一道习题。
要求:s表示剪刀,r表示石头,p表示布,两个玩家交替输入“字符”,然后程序给出输赢结果。
这个题的主要难点在于,如何处理字母。这是遇到的第一个要考虑输入字母的问题。也借此察觉到自己对相关知识的生疏和浮于表面。
考虑到之前接触过的例子。计算机是不会认识字母的,这题一定是把字母和数字对应。那么,定义三个变量自己赋值吗?有点玄乎。
想到ASCII码,这可有现成的数字。
查阅得:p,r,s分别对应112,114,115。
两两做差可知出题人意图:三个差正好分别是:1,2,3。
心中有底了。
于是大体思路就是,定义char类型变量储存玩家输入的字母,强制转换将其变成ASCII,作差,用差的值判断输赢。
考虑到同样两个字母组合有两种输赢情况(即结果有正负两个)于是引进if..else语句协助判断大小。
而三种差的对应正好可以用一下还没用过的switch语句。这样的话就要写一共六种情况。。虽然就算穷举也就才9种,但暂时想不到优化的办法。原码如下:

#include<iostream>
using namespace std;
int main()
{
    char a,b;int m,n,x;
    cout<<"玩家甲输入:"<<endl;
    cin>>a; 
    cout<<"玩家乙输入:"<<endl;
    cin>>b;
    m=int(a);
    cout<<m<<n; 
    n=int(b) ;
    if(m>n)
    {
        x=m-n;
        switch(x)
        {
            case 1: cout<<"乙胜!"; break; 
            case 2: cout<<"乙胜!"; break; 
            case 3: cout<<"甲胜!"; break; 
        }
    }
    else
    {
        x=n-m;
        switch(x)
        {
            case 1: cout<<"甲胜!"; break; 
            case 2: cout<<"甲胜!"; break; 
            case 3: cout<<"乙胜!"; break; 
        }
    }

 } 

P.P.S 字符s写在代码里的时候要加‘’,这里单引号是常量,字符常量。比如,定义一个char类型变量并赋值,就要写成:char a=’s’,
而在用键盘输入时则不用加单引号。
另外,这是第一次用强制转换把字母变成数字。在做之前还有些许怀疑可行否,果然实践才出真知。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值