1~5题

作者: 清一语 | 来源:发表于2017-01-20 12:05 被阅读0次

    1001. 害死人不偿命的(3n+1)猜想 (15)

    水题 ,没什么好讲的,应该一遍过 。


    1002. 写出这个数 (20)

    • 输入 :n的大小为10的100次,应该用数组去存它,因为long ,int,long long 都不够 ,而且这样比较方便计算每一位的总和,而且要用字
      符 数组。
      char input[100] ; scanf("%s",input) ;
      input前不用& ,因为它输入的是一个字符串 。

    • 计算 :
      输入的 数字是字符,应该把它转化为数字 ,并计算每一位的总和。
      for ( i = 0 ; input[i] != '\0' ; i++) sum += (int)(input[i] - 48 ) ;
      48指的是字符0的ASCII码
      算得在总和之后 ,应该读取每一位的数
      a[3] = {-1, -1,-1} ; // 用来存每一位数字,最多为三位,初始化为-1, 是为了判断数字最多为多少位 。 for ( j =0 ; sum > 0 ; j++ ) { a[j] = sum % 10 ; sum = sum / 10 ; }

    • 输出 :
      最后一个拼音之后没有空格 ,所以最后一个拼音要单独分出,是另一种情况。

       for(j=2; j>0; j--) { 
       switch (a[j]){
            case 0 : printf("ling ");  break ;
            case 1 : printf("yi ");    break ;
            case 2 : printf("er ");    break ;
            case 3 : printf("san ");   break ;
            case 4 : printf("si ");    break ;
            case 5 : printf("wu ");    break ;
            case 6 : printf("liu ");   break ;
            case 7 : printf("qi ");    break ;
            case 8 : printf("ba ");    break ;
            case 9 : printf("jiu ");   break ;
        }  }
           switch (a[0]){   // 输出最后一位拼音 
           case 0:printf("ling");  break;                     
           case 1 : printf("yi");    break ;                      
           case 2 : printf("er");    break ;                      
           case 3 : printf("san");   break ;                      
           case 4 : printf("si");    break ;                      
           case 5 : printf("wu");    break ;                      
           case 6 : printf("liu");   break ;                      
           case 7 : printf("qi");    break ;                      
           case 8 : printf("ba");    break ;                      
           case 9 : printf("jiu"); break ; 
      

    1003. 我要通过!(20)

    关键是要看懂题目的意思。

    1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
    2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
    3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。

    首先,一定要看包括P,A,T三个字母,而且是以aPbATc 这样的形式,a,b,c 是由A组成的字符串或空字符串。
    其次 ,由2可知,形如xPATx的字符串为正确,意思是PAT左右的字符串要相等,都为空字符串或同一长度的由A组成的字符串。
    又有3可知 , P和T的中间每增加一个A,T的右边就会增加一个与P的左边一样的字符串 。 结合2 ,得出 T右边的A组成的字符串的长度是P左边的A组成的字符串长度的整数倍。
    得出 ,在 aPbTc中 , 有c = ( b - 1 ) * a ,其中 a,b,c是字符串中A的个数 。


    1004. 成绩排名 (20)

    每个学生有成绩和学号,应该用结构体,每个学生和他的成绩和学号是整体。
    学号和名字要存成字符数组,成绩要存成int型的。
    先创建结构体。
    struct Student { char name[10] ; char number[10] ; int score ; } ;
    输入每个学生 ,每个学生的别名为p[i],存成一个数组,之后比较的时候会比较方便 。
    scanf("%d",&n) ; // 学生人数 for ( i = 0 ; i < n ; i++){ struct Student p[i] ; scanf("%s",&p[i].name) ; scanf("%s",&p[i].number) ; scanf("%d",&p[i].score) ; }
    比较成绩
    for ( i = 0 ; i < n ; i ++){ for ( j = 0 ; j + i < n -1 ;j ++){ // 冒泡排序法 if ( p[j].score > p[j+1].score){ p[100] = p[j] ; // 利用p[100]作为中间变量,交换p[j]和p[j+1] p[j] = p[j+1] ; p[j+1] = p[100] ; } } }

    讲真,我结构体不怎么会,这题是朱承浩写的。


    1005. 继续(3n+1)猜想 (25)

    这题用python写比较爽,用c语言的话,我比较无力。
    n = input() b = raw_input() k = b.split() a = [int(i) for i in k] res = [int(i) for i in k] // 两个相同的,深拷贝 for c in a : while c != 1 : if c % 2 == 0 : c = c / 2 if c in a : // 不能是 if c in res ,即使res 和a 中的元素一样 res.remove(c) // 不能删除a中的c元素 else : pass else : c = (3*c+1)/2 if c in a : res.remove(c) else : pass res.sort(reverse = True) for i in res : print i,
    不知道该怎么讲,自己感受一下吧 。

    相关文章

      网友评论

          本文标题:1~5题

          本文链接:https://www.haomeiwen.com/subject/flvwbttx.html