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

来源:互联网 发布:网络计划图绘制软件 编辑:程序博客网 时间:2024/06/05 09:44

一.对昨天的素数完全分解做了小改动,试了试其他循环语句。
之前保留了一点想当然的想法,认为在原结构中(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’,
而在用键盘输入时则不用加单引号。
另外,这是第一次用强制转换把字母变成数字。在做之前还有些许怀疑可行否,果然实践才出真知。

原创粉丝点击