毫无疑问, 这个又是给新入门学C语言的小鲜肉准备的!
题解:
1. 直接两个循环就ok啦! 当初讲课的时候几乎讲过原题啦。
2. 直接 100的三次方就是1000000啦, 所以直接对某数的三次方开方(取int型), 然后再平方, 判断一下是否相等。
3. 可以直接扫描一下, 把大写字母都转化成小写, 然后逐个判断!
4. 求组合数, 直接按照求组合数的公式, 然后循环求解, 就好啦!
5. 直接循环求出 真因子和, 判断一下是否和原数相等否, 即可!(这个好像也讲过原题!)
6.多重集的组合,这就是一个公式的事儿! 这个公式的推导过程也很机智!
附加题: 仔细回想一下自己小学算除法的过程, 然后用一个数组保存余数。 用另一个数组判断同一个余数是否出现两次,当有一个余数出现两次时, 立刻停止往下除。 然后找出这两个余数出现的位置(加括号), 然后把各 余数*10 /除数 输出即可! 。 详见代码!
Talk is cheap, show me your code!
各题代码:
1.

1 #include <iostream>
2 #include <cstdio>
3 using namespace std;
4
5 int main()
6 {
7 int ok;
8 printf("%d
", 2);
9 for(int i=3; i<=1000000; i++)
10 {
11 int ok = 1;
12 for(int j=2; j*j<=i; j++)
13 {
14 if(i%j==0)
15 {
16 ok = 0;
17 break;
18 }
19 }
20 if(ok) printf("%d
", i);
21 }
22 return 0;
23 }

#include<stdio.h> #include<math.h> const int maxn=10000000; int a[maxn]; int main() { for(int i=2;i<maxn;i++) a[i]=i; for(int i=2;i<sqrt(maxn);i++) if(a[i]) { for(int j=i*i;j<maxn;j=j+i) a[j]=0; } for(int i=2;i<maxn;i++) if(a[i]!=0) printf("%8d",i); }
2.

1 #include <iostream>
2 #include <cstdio>
3 #include <cmath>
4 using namespace std;
5
6 int main()
7 {
8 for(int i=1; i<=100; i++)
9 {
10 int q = sqrt(i*i*i*1.0);
11 if(q*q==i*i*i) printf("%d
", i*i*i);
12 }
13 return 0;
14 }

#include<cstdio> #include<cmath> int main() { for(int i=1;i<=100;i++){ if(sqrt(i*i*i)*sqrt(i*i*i)==i*i*i); printf("%8d ",i*i*i); } return 0; }
3.

1 #include <cstdio>
2 #include <cstring>
3 #include <iostream>
4 using namespace std;
5
6 char str[10005];
7
8 int main()
9 {
10 while(scanf("%s", str)!=EOF)
11 {
12 getchar();
13 for(int i=0; str[i]!='