| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3689 人关注过本帖, 4 人收藏
标题:几个适合新人练习的小问题,有兴趣的试试。大神还是绕道吧。
取消只看楼主 加入收藏
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
结帖率:100%
收藏(4)
已结贴  问题点数:100 回复次数:10 
几个适合新人练习的小问题,有兴趣的试试。大神还是绕道吧。
1、猜拳游戏(剪刀锤子布),让你与电脑对决。
    样例 请输入你要出的拳头
        A 剪刀
        B锤子  
        C布   
        D退出
        A
        你出了剪刀
        电脑出了布
        你赢了
2、求N的阶乘,13<=N<=3000。/*注意N的取值范围*/
3、排队形,N个数,N为奇数且5<=N<=100。输入随机的N个数,输出为中间的值最大,两边依次减小。
    例如   
    输入    N=9
    输入    15 21 16 33 18 25 25 29 31
    输出    15 18 25 29 33 31 25 21 16
4、输入一个由10个整数组成的序列,其中序列中任意连续三个整数都互不相同,求该序列中所有递增或递减子序列的个数。
   例如:输入 1 8 5 9 3 2 6 7 4 10
         输出 7    //总的有7种,输出以下7种
              1 8
              8 5
              5 9
              9 3 2
              2 6 7
              7 4
              4 10  
        
5、2的1992次方的个位和十位上的数分别是几。           

[此贴子已经被作者于2016-11-3 21:02编辑过]

搜索更多相关主题的帖子: 游戏 
2016-11-03 20:36
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
回复 3楼 ehszt
修改过来了
2016-11-03 21:02
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
回复 5楼 yangfrancis
因为是题目定下2的1992次方,所以只要能正确得出个位和十位上的数,哪怕一句printf也行。
既然说是让新人练习用的,肯定不会难,关键还是要找到规律。
当然我相信你能轻松搞定这题
2016-11-03 21:23
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
第一题的思路:
电脑 -- 玩家    剪刀(4)    石头(7)    布(10)
剪刀(0)                4        7        10
石头(1)                5        8        11
布(2)                6        9        12
它们之间的和都是唯一的,
电脑和玩家的和:6,7,11表示玩家赢了。
电脑和玩家的和:5,9,10表示玩家输了。
除了上述两种情况就表示平手。
2016-11-04 09:15
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
回复 10楼 书生牛犊
第五题:最后两位数实际上是一个循环。
这里分开问也就是想提醒大伙存在这么一个循环。个位数只存在2,4,6,8这4个数值。同理,最后两位数也存在类似的一个循环。
当然,你说的方法适合不同整数的N次方取最后两位的运算。
通过这题,就是想说。往往看适复杂的东西,只要你理解它的规则,其实它并不难。

[此贴子已经被作者于2016-11-4 09:46编辑过]

2016-11-04 09:42
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
回复 12楼 书生牛犊
M的N次方,它存在这样的循环,最后取的位数越多,循环拉的越长,个人觉得取最后两位还算合理。不论笔算还是用计算器算都在可接受范围。
3000的阶乘可以放的下。
这里最好用动态数组来处理,可以通过斯特林公式计算log10(2*PI*n)/2+n*log10(n/E)+1,为了保证能放的下将公式小小的修改一下log10(2*PI*n)+n*log10(n)+1;
其实只要能算到百个数位,那么百万个数位只不过就是存放的空间大小不一样而已。

[此贴子已经被作者于2016-11-4 10:59编辑过]

2016-11-04 10:28
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
# include <stdio.h>
# include <stdlib.h>
# include <math.h>
# define PI 3.141592654
using namespace std;
int M;
void f(int n)
{
  M=log10(2*PI*n)+n*log10(n)+1;        //位数计算
  /*标准公式:log10(2*PI*n)/2+n*log10(n/E)+1,E的值是2.71828182846*/
}

void fun(int n)
{   
      int *result =NULL;
      result=(int *)calloc(M,sizeof(int));     
      result[0]=1;      
      int number_count=1;//位数     
      int number_carry=0;//进位     
      int number_temp=0;//临时值     
      for(int i=1;i<=n;i++)     
      {
           for(int j=0;j<number_count;j++)         
           {              
                   number_temp=result[j]*i+number_carry;            
                   result[j]=number_temp%10;            
                number_carry=number_temp/10;         
            }         
            while(number_carry)         
            {              
                result[number_count]=number_carry%10;            
                number_carry=number_carry/10;            
                number_count++;         
            }     
        }      
        for(int i=number_count-1;i>=0;--i)         
            printf("%d",result[i]);     
            printf("\n");     
            free(result);
}

int main()
{     
    int n;     
    while(scanf("%d",&n))     
    {         
        if(n==0)              
        printf("1\n");         
        else            
        {
            f(n);
            fun(n);  
        }   
    }     
    return 0;
}
N阶乘的代码,输入非数字退出
2016-11-04 11:30
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    int computer,gamer,result;
    char k;
    printf("这是一个猜拳的小游戏,请输入你要出的拳头:\n");
    while(1)
    {         
        printf("A:剪刀\nB:石头\nC:布\nD:不玩了\n");
        srand((unsigned)time(NULL));
        computer=rand()%3;
        scanf(" %c",&k);
        //getchar();
        if(k==65||k==97) gamer=4;
        else if(k==66||k==98) gamer=7;
        else if(k==67||k==99) gamer=10;
        else if(k==68||k==100)  return 0;
        printf("电脑出了");
         switch (computer)
        {
            case 0:printf("剪刀\n");break;
            case 1:printf("石头\n");break;
            case 2:printf("布\n");break;  
        }
        printf("你出了");
        switch (gamer)
        {
            case 4 :printf("剪刀\n");break;
            case 7 :printf("石头\n");break;
            case 10:printf("布\n");break;  
        }
        result=gamer+computer;
        if (result==6||result==7||result==11) printf("你赢了!\n");
        else if (result==5||result==9||result==10) printf("电脑赢了!\n");
        else printf("平手\n");
        system("pause>nul&&cls");         
    }
    return 0;   
}
猜拳游戏代码。
和楼上的大神方法类似。写法不同。

[此贴子已经被作者于2016-11-4 15:52编辑过]

2016-11-04 15:49
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
回复 20楼 wp231957
没问题的,scanf(" %c",&k);scanf里保留了一个空格。专门针对空白符。
2016-11-04 15:57
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
回复 22楼 wp231957
嗯,是的。
同时,我是没有考虑一次性输入多个非空白符的情况。还是大神你考虑的比较全面。
2016-11-04 16:00
快速回复:几个适合新人练习的小问题,有兴趣的试试。大神还是绕道吧。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016896 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved