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)
关键是要看懂题目的意思。
- 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
- 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
- 如果 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,
不知道该怎么讲,自己感受一下吧 。