小题精炼-----初试C语言
毫无疑问, 这个又是给新入门学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\n", 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\n", 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\n", 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\n",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]!='\0'; i++)
14 if(str[i]>='A'&&str[i]<='Z') str[i] += 32;
15 int len = 0;
16 for(int i=0; str[i]!='\0'; i++)
17 {
18 if(str[i]!='#') len++;
19 for(int j=i+1; str[j]!='\0'; j++)
20 if(str[i]==str[j]) str[j] = '#';
21 }
22 printf("%d\n", len);
23 }
24 return 0;
25 }
#include<cstdio> #include<cstring> const int maxn=1000000; char s[maxn]; int main() { int a[26]={0}; while(~scanf("%s",s)) { int sum=0,len=strlen(s); for(int i=0;i<len;i++){ if(a[s[i]-65]==1||a[s[i]-97]==1) continue; if(s[i]>=65&&s[i]<=90) a[s[i]-65]=1; if(s[i]>=97&&s[i]<=122) a[s[i]-97]=1; } for(int i=0;i<26;i++) if(a[i]) sum++; printf("%d\n",sum); } return 0; }
4.
1 #include <iostream>
2 #include <cstdio>
3 using namespace std;
4
5 int main()
6 {
7 int ans;
8 int n, m;
9 while(scanf("%d%d", &n, &m)!=EOF)
10 {
11 ans = 1;
12 if(m<n-m) m = n-m;
13 for(int i=m+1; i<=n; i++)
14 ans*=i;
15 for(int i=1; i<=n-m; i++)
16 ans/=i;
17 printf("%d\n", ans);
18 }
19 return 0;
20 }
#include<cstdio> int comb(int n,int m) { if(m==0||n==m) return 1; return comb(n-1,m)+comb(n-1,m-1); } int main() { int m,n; while(scanf("%d%d",&n,&m)!=EOF){ printf("%d\n",comb(n,m)); } return 0; }
5.
1 #include <iostream>
2 #include <cstdio>
3 using namespace std;
4
5 int main()
6 {
7 for(int i=5; i<=1000000; i++)
8 {
9 int sum = 1;
10 for(int j=2; j*j<=i; j++)
11 {
12 if(i%j==0) sum += j + i/j;
13 if(j*j==i) sum-=j;
14 }
15 if(sum==i) printf("%d\n", i);
16 }
17 return 0;
18 }
#include<cstdio> const int maxn=1000000; int main() { int s; for(int i=6;i<=maxn;i++){ s=0; for(int j=1;j<i;j++){ if(i%j==0) s+=j; } if(s==i) printf("%d\n",s); } return 0; }
6.
1 #include <iostream>
2 #include <cstdio>
3 using namespace std;
4
5 int main()
6 {
7 int ans=1;
8 for(int i=10+1; i<=14; i++)
9 ans*=i;
10 for(int i=1; i<=14-10; i++)
11 ans/=i;
12 printf("%d\n", ans);
13 return 0;
14 }
附加题:
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 using namespace std; 5 6 bool vis[2000]; 7 int ans[2000]; 8 9 int main() 10 { 11 int a, b; 12 while(scanf("%d%d", &a, &b)!=EOF) 13 { 14 printf("%d", a/b); 15 if(a%b==0) {printf("\n"); continue;} 16 printf("."); 17 int flag = -1; int k=0; 18 memset(vis, 0, sizeof(vis)); 19 a = a%b; vis[a] = 1; ans[k++] = a; 20 while(a%b) 21 { 22 a *= 10; 23 int temp = a%b; 24 if(vis[temp]) 25 { 26 for(int i=0; i<k; i++) 27 { 28 if(temp==ans[i]) 29 { 30 flag = i; break; 31 } 32 } 33 break; 34 } 35 else 36 { 37 ans[k++] = temp; 38 a = temp; 39 vis[temp] = 1; 40 } 41 } 42 if(flag==-1) 43 { 44 for(int i=0; i<k-1; i++) 45 printf("%d", ans[i]*10/b); 46 } 47 else 48 { 49 if(flag==0) printf("("); 50 else 51 { 52 for(int i=0; i<flag; i++) 53 printf("%d", ans[i]*10/b); 54 printf("("); 55 } 56 for(int i=flag; i<k; i++) 57 printf("%d", ans[i]*10/b); 58 printf(")"); 59 } 60 printf("\n"); 61 } 62 return 0; 63 }