跟siki老师学C#第六天(练习部分)

十三道练习题,以我这麻瓜脑袋,估计又要有漏了。。。

1.找出100到999之间的水仙花数,如153=1*1*1+5*5*5+3*3*3;

for (int i = 100; i < 1000; i++)
{
    int hundredNum = i / 100;
    int tenNum = (i / 10) % 10;
    int unitNum = i % 10;
    int sum=hundredNum*hundredNum*hundredNum + tenNum*tenNum*tenNum + unitNum*unitNum*unitNum;
    if (sum == i)
    {
        Console.WriteLine("{0}是水仙花数!", i);
    }
}

这里写图片描述

2.3个可乐瓶可以换一瓶可乐,那么如果有364瓶可乐,可以喝多少瓶可乐?剩下多少个空瓶子?

int cokeNum = 364;
int bottleNum = 364;

while (bottleNum >= 3)
{

    cokeNum += bottleNum / 3;
    bottleNum = bottleNum / 3 + bottleNum % 3;   //关键就是瓶子的计算,每一次计算瓶子都是上一次的瓶子除以三得到换了多少瓶可乐再加上上次换可乐剩下的瓶子
}
Console.WriteLine("可以喝{0}瓶可乐!",cokeNum);
Console.WriteLine("最终剩下{0}个瓶子!",bottleNum);
Console.ReadKey();

这里写图片描述

3.猜数字游戏,我有一个数字,请你猜猜是多少。如用户输入了一个数,告诉用户是大了还是小了还是猜对了,如果没对就重新输入;

bool isGuessTrue = false;

while (isGuessTrue == false)
{
    Console.WriteLine("请输入您猜的数字:");
    int guessNum = Convert.ToInt32(Console.ReadLine());
    if (guessNum > 75)
    {
        Console.WriteLine("数字比{0}小!",guessNum);
    }
    else if (guessNum < 75)
    {
        Console.WriteLine("数字比{0}大!", guessNum);
    }
    else
    {
        Console.WriteLine("猜对了!数字就是{0}!", guessNum);
        isGuessTrue = true;
    }
}

通过while循环来使用户持续多次输入数字,每次用户输入后判断并给出提示。这里我把要猜的数字手动设为75.
这里写图片描述

4.编写一个应用程序对输入的字符串进行加密:’a’->’d’ ‘b’->’e’ …… ‘w’->’z’ ‘x’->’a’ ‘y’->’b’ ‘z’->’c’ &’A’->’D’ ‘B’->’E’ …… ‘W’->’Z’ ‘X’->’A’ ‘Y’->’B’ ‘Z’->’C’其他字符不加密;
这个练习用到了我们之前学到的取字符串的每一位:

Console.WriteLine("请输入要加密的字符串:");
string passwardStr = Console.ReadLine();
string[] passwardStrArrary=new string[passwardStr.Length];
for (int i = 0; i < passwardStrArrary.Length; i++)
{
    int charNum = passwardStr[i];
    passwardStrArrary[i]=passwardStr[i].ToString();
    if (charNum < 120 && charNum >= 97)
    {
        passwardStrArrary[i] = Convert.ToString( (char)(charNum + 3));
    }
    else if (charNum < 123 && charNum >= 120)
    {
        passwardStrArrary[i] = Convert.ToString((char)(charNum - 23));
    }
    else if (charNum < 88 && charNum >= 65)
    {
        passwardStrArrary[i] = Convert.ToString((char)(charNum + 3));
    }
    else if (charNum >= 88 && charNum < 91)
    {
        passwardStrArrary[i] = Convert.ToString((char)(charNum - 23));
    }
}
Console.WriteLine("加密后的字符串是:");
for (int i = 0; i < passwardStrArrary.Length; i++)
{

    Console.Write(passwardStrArrary[i]);
}

这里用到了一个数组,把字符串的每个字母拆分开,存到数组中,然后对每一个字母进行判断,然后修改满足条件的字母,最终结果在数组里,最后输出数组即可。
这里写图片描述
5.编写一个程序,把用户输入的一组数字从小到大输出;

Console.WriteLine("请输入一组数字,数字之间用逗号隔开:");
string str = Console.ReadLine();
string[] strArrary = str.Split(new char[] { ',' });

for (int i = 0; i < strArrary.Length; i++)
{
    double iNum = Convert.ToDouble(strArrary[i]);
    for (int j = i+1; j < strArrary.Length; j++)
    {
        double jNum = Convert.ToDouble(strArrary[j]);
        if (jNum<iNum)
        {
            double midNum = jNum;
            jNum = iNum;
            iNum = midNum;

            strArrary[i] = iNum.ToString();
            strArrary[j] = jNum.ToString();
        }
    }
}
Console.WriteLine("排序后的数字序列为:");
for (int i = 0; i < strArrary.Length; i++)
{

    Console.Write("{0},",strArrary[i]);
}

这道练习题又用到了我们之前用过的一个方法:字符串的Split()方法,括号里填上某种类型的符号,表示把一个字符串用某种符号切分,尤其要注意的是:该方法的返回值是一个string类型的数组。所以我们先定义了这样的一个数组来存储返回值,在排序的时候,依次把每一个值取出来,转换成double类型进行比较,如果后面的比前面的小,则交换,接着要记得把交换后的值转化成string类型,再次存入数组中,以便于输出,最后就是顺序的输出了。

6.第一天悟空吃掉了一半的桃子多一个,第二天又将剩下的桃子吃掉了一半多一个,以后每一天吃掉前一天剩下桃子的一半多一个,到了第n天就只剩下一个桃子了,用户输入n,求出桃子的总数;

//前一天桃子的个数除以二再减去1就等于今天的桃子的个数
//那么前一天桃子的个数就是今天桃子的个数加一后乘以二
Console.WriteLine("请输入天数n:");
int fate = Convert.ToInt16( Console.ReadLine());
int peachNum = 1;

for (int i = 1;i<=fate ; i++)
{
    peachNum = (peachNum + 1) * 2;
}

Console.WriteLine("桃子一共有{0}个!", peachNum);

9.有n个整数(n<100),已经按照从小到大的顺序排列好,现在另外给出一个整数x,请将x插入到合适的位置;

double[] intArrary = new double[20] { 1, 3, 4, 5, 6, 8, 9, 11, 20, 31, 32, 34, 35, 37, 39, 41, 44, 46, 99, 100 };   //事先定义了数组,并提供了值
Console.WriteLine("请输入要插入的整数:");
double num = Convert.ToDouble(Console.ReadLine());
double[] doubleArrary2 = new double[intArrary.Length + 1];

for (int i = 0; i < intArrary.Length; i++)
{
    if (num > intArrary[i])
    {
        doubleArrary2[i] = intArrary[i];
    }
    if (num < intArrary[i])
    {
        doubleArrary2[i] = num;
        for (int j = i+1; j < intArrary.Length; j++)   //这里不能从i开始,因为上面刚对i进行操作
        {
            doubleArrary2[j] = intArrary[j];
        }
        break;
    }
}

Console.WriteLine("插入后的序列为:");
for (int i = 0; i < doubleArrary2.Length; i++)
{
    Console.Write("{0},",doubleArrary2[i]);
}

10.输入一个字符串,判断其是否是C#的合法标识符;
什么是合法标识符?首字母a-z、A-Z、-、@,不允许为数字,后续字符不允许为@

Console.WriteLine("请输入标识符:");
string identifier = Console.ReadLine();
char[] identifierArray = new char[identifier.Length-1];   //因为我们不需要首字母了
bool islegal = true;

for (int i = 0; i < identifierArray.Length; i++)
{
    identifierArray[i] = identifier[i + 1];    //因为我们不需要首字母了
}

if ((identifier[0] >= 97 && identifier[0] <= 122) || (identifier[0] >= 65 && identifier[0] <= 90)||identifier[0]==64||identifier[0]==45)   //如果首字母满足条件就遍历除首字母开外的其他字符
{
    foreach (char character in identifierArray)
    {
        if (character == 64)    //后续字符中出现了@字符
        {
            islegal = false;
            break;
        }
    }
}
else    //该标识符的首字母不是大写字母、小写字母、-、@
{
    islegal = false;
}

if (islegal)
{
    Console.WriteLine("该标识符合法!");
}
else
{
    Console.WriteLine("该标识符不合法!");
}

11.判断一个字符串是否是回文串:level、noon;

Console.WriteLine("请输入要判断的字符串:");
string str = Console.ReadLine();

for (int i = 0; i <= str.Length/2; i++)
{
    if (str[i] != str[str.Length-i-1])   //这里要减去1 为什么呢?假设字符串有5个字母,但是最大索引只能是4,因此不减去1的话,当i=0的时候,索引就是5,5是不存在的。
    {
        Console.WriteLine("{0}不是回文串!",str);
        break;
    }
    if (i == str.Length / 2)   //当循环到一半的时候还没有跳出,无论字母数是奇数还是偶数,都是回文串了。
    {
        Console.WriteLine("{0}是回文串!", str);
    }
}

12.给出一个字符串作为密码,判断密码时候是安全密码(安全密码包括以下四个条件中的三个:
i.大写字母;
ii.小写字母;
iii.数字;
iv.特殊符号:- ! @ # ¥ % ^);

Console.WriteLine("请输入密码:");
string str = Console.ReadLine();
char[] strArrary = new char[str.Length];

for (int i = 0; i < str.Length; i++)
{
    strArrary[i] = str[i];  //先把字符串填到数组里面
}

int trueNum = 0;    //用来存储满足条件的个数
bool isCapital = false;    //默认没有大写字母
bool isLowerCase = false;    //默认没有小写字母
bool isNum = false;   //默认没有数字
bool isSign = false;    //默认没有符号

foreach(char str1 in strArrary)
{
    if(str1>=65&&str1<=90&&isCapital==false)   //表示字符串中含有大写字母
    {
        trueNum++;
        isCapital = true;
    }
    if (str1 >= 97 && str1 <= 122&&isLowerCase==false)   //表示字符串中含有小写字母
    {
        trueNum++;
        isLowerCase = true;
    }
    if (str1 >= 48 && str1 <= 57&&isNum==false)    //表示字符串中含有数字
    {
        trueNum++;
        isNum = true;
    }
    if (str1 >= 33 && str1 <= 47&&isSign==false)    //表示字符串中含有基本符号
    {
        trueNum++;
        isSign = true;
    }
}


if (trueNum >= 3)
{
    Console.WriteLine("该密码是安全密码!");
}
else
{
    Console.WriteLine("该密码不是安全密码!");
}

通过bool类型和数值类型配合判断出满足安全类型的条件满足了几个。

有的题目看都没看懂,直接删了。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值