当前位置:   article > 正文

西工大noj c语言前四十五道_c语言noj飞机起飞速度代码

c语言noj飞机起飞速度代码

专业融合:飞行速度的题无法AC正常

A+B

  1. #include <stdio.h>
  2. int add()
  3. {
  4. int a,b,sum;
  5. scanf("%d%d",&a,&b);
  6. sum=a+b;
  7. return sum;
  8. }
  9. int main()
  10. {
  11. int result;
  12. result=add();
  13. printf("%d",result);
  14. return 0;
  15. }

数据类型的大小和范围

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int d;
  6. scanf("%d",&d);
  7. if (d==1){
  8. printf("1,-128,127");
  9. }else if (d==2){
  10. printf("1,0,255");
  11. }else if (d==3){
  12. printf("2,-32768,32767");
  13. }else if (d==4){
  14. printf("2,0,65535");
  15. }else if (d==5){
  16. printf("4,-2147483648,2147483647");
  17. }else if (d==6){
  18. printf("4,0,4294967295");
  19. }else if (d==7){
  20. printf("4,-2147483648,2147483647");
  21. }else if (d==8){
  22. printf("4,0,4294967295");
  23. }else if (d==9){
  24. printf("8,0,9223372036854775807");
  25. }else if(d==10){
  26. printf("8,0,18446744073709551615");
  27. }
  28. return 0;
  29. }

平均值

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. long int a,b,avg;
  6. scanf("%ld %ld",&a,&b);
  7. avg=(a+b)/2;
  8. printf("%ld",(long int)(avg));
  9. return 0;
  10. }

进制转换

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int a;
  6. scanf("%d",&a);
  7. printf("%X,%o",a,a);
  8. return 0;
  9. }

浮点数输出

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. double a;
  6. scanf("%lf",&a);
  7. printf("%.6f,%.2f,%.8f",a,a,a);
  8. return 0;
  9. }

动态宽度输出

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. double a;
  6. scanf("%lf",&a);
  7. printf("%.6f,%.2f,%.8f",a,a,a);
  8. return 0;
  9. }

计算地球上两点之间的距离

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. double a;
  6. scanf("%lf",&a);
  7. printf("%.6f,%.2f,%.8f",a,a,a);
  8. return 0;
  9. }

风寒指数

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<math.h>
  4. int main()
  5. {
  6. double a,b,d,result;
  7. int c;
  8. scanf("%lf %lf",&a,&b);
  9. d=pow(a,0.16);
  10. result=13.12+0.6215*b-11.37*d+0.3965*b*d;
  11. c=(int)round(result);
  12. printf("%d",c);
  13. return 0;
  14. }

颜色模型转化

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<math.h>
  4. unsigned int Max(int x,int y,int z)
  5. {
  6. unsigned int max;
  7. if(x>y) max=x;
  8. else max=y;
  9. if(z>max) max=z;
  10. return max;
  11. }
  12. unsigned int Min(int x,int y,int z)
  13. {
  14. unsigned int min;
  15. if(x>y) min=y;
  16. else min=x;
  17. if(z<min) min=z;
  18. return min;
  19. }
  20. int main()
  21. {
  22. unsigned int R,G,B,a;
  23. double H,S,V;
  24. scanf("%u %u %u",&R,&G,&B);
  25. V = Max(R,G,B);
  26. a = Min(R,G,B);
  27. if(V==0) S=0;
  28. else S=(V-a)/V;
  29. if (V==R) H=60*(G-B)/(V-a);
  30. else if(V==G) H=60*(2+(B-R)/(V-a));
  31. else H=60*(4+(R-G)/(V-a));
  32. if (H<0) H=H+360;
  33. S = S*100;
  34. V = V/255;
  35. V = V*100;
  36. printf("%.4lf,%.4lf%%,%.4lf%%",H,S,V);
  37. return 0;
  38. }

倍数和

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<math.h>
  4. int main()
  5. {
  6. int i=0,m=1,n=0,sum=0,T=0;
  7. scanf("%d",&T);
  8. while (i<T){
  9. scanf("%d",&n);
  10. while(m<n){
  11. if ((m%3==0)&&(m%5==0)){
  12. sum=sum+m;
  13. m++;
  14. }else if ((m%3!=0)&&(m%5==0)){
  15. sum=sum+m;
  16. m++;
  17. }else if ((m%3==0)&&(m%5!=0)){
  18. sum=sum+m;
  19. m++;
  20. }else {
  21. m++;
  22. }
  23. }
  24. printf("%d\n",sum);
  25. i++;
  26. }
  27. return 0;
  28. }

组合数

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<math.h>
  4. int main()
  5. {
  6. int a,b,c,d,n,i;
  7. scanf("%d",&n);
  8. for (a=0;a>=0&&a<=9;a++)
  9. for (b=0;b>=0&&b<=9;b++)
  10. for (c=0;c>=0&&c<=9;c++)
  11. for (d=0;d>=0&&d<=9;d++)
  12. if(a+b+c+d==n){
  13. i++;
  14. }
  15. printf("%d",i);
  16. return 0;
  17. }

级数和

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<math.h>
  4. int main()
  5. {
  6. int a;
  7. double b,c,n,sum=0;
  8. scanf("%lf",&n);
  9. for (a=1,b=2;a<n,b<(n+1);a++,b++){
  10. if (b<10){c=a+(b/10);
  11. printf("%.1lf+",c);
  12. }else if(b==10) {c=a+(b/100);
  13. printf("%.1lf+",c);
  14. }else if(b==100) {c=a+(b/1000);
  15. printf("%.2lf+",c);
  16. }else { c = a + (b/100);
  17. printf("%.2lf+",c);
  18. }
  19. sum = sum + c;
  20. }
  21. if (n<9){
  22. c=n+((n+1)/10);
  23. printf("%.1lf",c);
  24. }else if (n==9){
  25. c=n+((n+1)/100);
  26. printf("%.1lf",c);
  27. }else if (n==99) {c=99.10;
  28. printf("%.2lf",c);
  29. }else {c=n+((n+1)/100);
  30. printf("%.2lf",c);
  31. }
  32. sum = sum + c;
  33. if(n<10)printf("=%.1lf",sum);
  34. else printf("=%.2lf",sum);
  35. return 0;
  36. }

幂数模

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //long long int model(long long int *result,long long int num,long long int mod);
  4. long long int BinExp(long long int num,long long int index,long long int mod);
  5. int main()
  6. {
  7. long long int num,index,mod,result;scanf("%lld%lld%lld",&num,&index,&mod);//输入底数,指数和取模的数
  8. result = BinExp(num,index,mod);
  9. printf("%lld",result);
  10. }
  11. long long int BinExp(long long int num,long long int index,long long int mod)//解决快速幂的问题
  12. {
  13. long long int result=1;//结果
  14. while(index!=0)
  15. {
  16. if(index&1)//index%2==1
  17. result=(result*num)%mod;
  18. num=(num*num)%mod;
  19. index >>= 1;//index=index/2
  20. }
  21. return result;
  22. }

乘数模

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. long long int a,b,m,result1,result2,result;
  6. scanf("%lld %lld %lld",&a,&b,&m);
  7. result1=b%m;
  8. result2=a%m;
  9. result=(result1*result2)%m;
  10. printf("%lld",result);
  11. return 0;
  12. }

分数的加减乘除法

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int gys(int x,int y)
  4. {
  5. int m;
  6. while (m=x%y){
  7. x=y;
  8. y=m;
  9. }
  10. return y;
  11. }
  12. int main()
  13. {
  14. int a,b,c,d,num,den,div;
  15. scanf("%d/%d\n",&a,&b);
  16. scanf("%d/%d",&c,&d);
  17. num=a*d+b*c;
  18. den=b*d;
  19. div=gys(num,den);
  20. num=num/div;
  21. den=den/div;
  22. printf("(%d/%d)+(%d/%d)=%d/%d\n",a,b,c,d,num,den);
  23. num=a*d-b*c;
  24. den=b*d;
  25. div=gys(num,den);
  26. num=num/div;
  27. den=den/div;
  28. printf("(%d/%d)-(%d/%d)=%d/%d\n",a,b,c,d,num,den);
  29. num=a*c;
  30. den=b*d;
  31. div=gys(num,den);
  32. num=num/div;
  33. den=den/div;
  34. printf("(%d/%d)*(%d/%d)=%d/%d\n",a,b,c,d,num,den);
  35. num=a*d;
  36. den=b*c;
  37. div=gys(num,den);
  38. num=num/div;
  39. den=den/div;
  40. printf("(%d/%d)/(%d/%d)=%d/%d",a,b,c,d,num,den);
  41. return 0;
  42. }

比率

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int gys(int x,int y)
  4. {
  5. int m;
  6. while (m=x%y){
  7. x=y;
  8. y=m;
  9. }
  10. return y;
  11. }
  12. int main()
  13. {
  14. double a;
  15. int num,den=10000,div;
  16. scanf("%lf",&a);
  17. num=a*10000;
  18. div=gys(num,den);
  19. num=num/div;
  20. den=den/div;
  21. printf("%d/%d",num,den);
  22. return 0;
  23. }

操作数

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int i,j=0,n=0,sum=0;
  6. scanf("%d",&n);
  7. i=n;
  8. for (;n>0;j++){
  9. for (;i!=0;i=i/10){
  10. sum=sum+i%10;
  11. }n=n-sum;
  12. i=n;
  13. sum=0;
  14. }
  15. printf("%d",j);
  16. return 0;
  17. }

方阵

  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5. long long n;
  6. scanf("%lld",&n);
  7. long long i,j;
  8. long long h;
  9. for(i=0;i<n;i++)
  10. {
  11. for(j=0;j<n;j++)
  12. {
  13. h=abs(i-j);
  14. printf("%lld",h);
  15. if(j!=n-1)
  16. printf(" ");
  17. else
  18. printf("\n");
  19. }
  20. }
  21. return 0;
  22. }

对称数

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<math.h>
  4. int main()
  5. {
  6. int a,b,digit=0,p=0,m,n,k,i=0;
  7. scanf("%d",&n);
  8. m=n;
  9. k=n;
  10. while (m!=0)
  11. {
  12. m=m/10;
  13. digit++;
  14. }
  15. while (n>0){
  16. a=n%10;
  17. if (a==0||a==1||a==6||a==8||a==9){
  18. if(a==0&&i==0){
  19. break;
  20. }else if (a==1){
  21. p+=pow(10,digit-1);
  22. }else if (a==6){
  23. p+=pow(10,digit-1)*9;
  24. }else if (a==9){
  25. p+=pow(10,digit-1)*6;
  26. }else if (a==8){
  27. p+=pow(10,digit-1)*8;
  28. }else p=p;
  29. }else {
  30. break;
  31. }n/=10;
  32. i++;
  33. digit--;
  34. }
  35. if (p==k||k==0) printf("Yes");
  36. else printf("No");
  37. return 0;
  38. }

俄罗斯农夫算法

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. long a,b;
  6. long sum=0;
  7. scanf("%ld %ld",&a,&b);
  8. if (a == 0 || b == 0){
  9. printf("0\n");
  10. }else if (a == 1){
  11. printf("%ld\n",b);
  12. }else {
  13. printf("%ld %ld\n",a,b);
  14. while (a!=1){
  15. if (a%2==1){
  16. sum=sum+b;
  17. }
  18. a=a/2;
  19. b=b*2;
  20. printf("%ld %ld\n",a,b);
  21. }
  22. sum=sum+b;
  23. printf("%ld\n",sum);
  24. }
  25. return 0;
  26. }

最大数字

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int n,i,a,b,judge;
  6. scanf("%d",&n);
  7. i=n;
  8. while (n!=0){
  9. while (n!=0){
  10. a=n%10;
  11. b=a;
  12. n=n/10;
  13. a=n%10;
  14. if (b<a) {
  15. judge=0;
  16. break;
  17. }
  18. else {
  19. judge=1;
  20. continue;
  21. }
  22. }
  23. if (judge==0){
  24. i--;
  25. n=i;
  26. }else {
  27. printf("%d",i);
  28. break;
  29. }
  30. }
  31. return 0;
  32. }

余数和

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int n,k,sum=0;
  6. scanf("%d %d",&n,&k);
  7. for (int i=1;i<=n;i++){
  8. sum = sum + k%i;
  9. }
  10. printf("%d",sum);
  11. return 0;
  12. }

查找数列

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int n,sum=0;
  6. scanf("%d",&n);
  7. for (int i=1;sum<=n;i++){
  8. sum +=i;
  9. if(sum>=n){
  10. printf("%d",n-sum+i);
  11. break;
  12. }
  13. }
  14. return 0;
  15. }

方案数

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int n,m,p,i=1,sum=0,j=0;
  6. scanf("%d",&n);
  7. for (m=1;i<=n;m++){
  8. i=m;//while语句跳出后,要重置i的值
  9. while (n){
  10. sum +=i;
  11. if (sum>n){
  12. sum=0;
  13. break;//sum过大,重置循环
  14. }else if (sum <n){
  15. i++;//sum不足,继续循环
  16. }else {
  17. j++;//满足后记录,并重置循环
  18. sum=0;
  19. break;
  20. }
  21. }
  22. }
  23. printf("%d",j);
  24. return 0;
  25. }

毕达哥拉斯三元组、

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int a,b,c,n,flag;
  6. long long sum;
  7. scanf("%d",&n);
  8. for (a=0;a<n;a++){
  9. for (b=a;b<n;b++){
  10. c=n-a-b;
  11. if(a+b>c&&b-a<c&&a*a+b*b==c*c){
  12. flag=1;
  13. sum=a*b*c;
  14. printf("%lld",sum);
  15. break;
  16. }else {
  17. flag=0;
  18. continue;
  19. }
  20. }
  21. if (flag==1) break;
  22. else continue;
  23. }
  24. return 0;
  25. }

竖式乘法

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int digit(int x)
  4. {
  5. int i;
  6. for (i=0;x>0;x=x/10){
  7. if (x==0) break;
  8. else i++;
  9. }
  10. return i;
  11. }
  12. int main()
  13. {
  14. int a,b,d,i=0,c,d1,g=0,b1;
  15. scanf("%d %d",&a,&b);
  16. d = digit(a*b);
  17. d1=d;
  18. b1=b;
  19. if (a!=0&&b!=0){printf("%*d\n",d+1,a);
  20. printf("x%*d\n",d,b);
  21. while (i<d+1) {
  22. printf("-");
  23. i++;
  24. }
  25. printf("\n");
  26. for (int j=0;b>0;b=b/10){
  27. if (b>9){
  28. c=b%10;
  29. printf("%*d\n",d+1,c*a);
  30. d--;
  31. }else {
  32. c=b%10;
  33. printf("+%d\n",c*a);
  34. }
  35. }
  36. while (g<d1+1) {
  37. printf("-");
  38. g++;
  39. }
  40. printf("\n");
  41. printf(" ");
  42. printf("%d",a*b1);}
  43. else if(b==0){
  44. printf(" ");
  45. printf("%d\n",a);
  46. printf("x%*d\n",digit(a),b);
  47. while (g<digit(a)+1) {
  48. printf("-");
  49. g++;
  50. }
  51. printf("\n%*d",digit(a)+1,0);
  52. }else {
  53. printf(" ");
  54. printf("%d\n",a);
  55. printf("x%*d\n",digit(b),b);
  56. while (g<digit(b)+1) {
  57. printf("-");
  58. g++;
  59. }
  60. printf("\n%*d",digit(b)+1,0);
  61. }
  62. return 0;
  63. }

阶乘倍数

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. int panduan(int num)
  5. {
  6. for(int i=2;i*i<=num;i++)
  7. {
  8. if(num%i==0)
  9. {
  10. return 0;
  11. }
  12. }
  13. return 1;
  14. }
  15. int main()
  16. {
  17. long long int n=1,k,plus=1;
  18. scanf("%lld",&k);
  19. if(panduan(k))
  20. {
  21. printf("%lld",k);
  22. }
  23. else for(n=1;plus%k!=0;n++)
  24. {
  25. plus=n*plus;
  26. if(plus%k==0)
  27. {
  28. printf("%lld",n);
  29. break;
  30. }
  31. }
  32. return 0;
  33. }

倒水

  1. #include <stdio.h>
  2. #include <stdbool.h>
  3. #include <stdlib.h>
  4. typedef struct {
  5. int x, y; // 杯子1和杯子2的当前水量
  6. int steps; // 当前步数
  7. } State;
  8. int min(int a, int b) {
  9. return a < b ? a : b;
  10. }
  11. bool isTargetState(State state, int target_y) {
  12. if(state.y == target_y || state.x == target_y)
  13. return true;
  14. else
  15. return false;
  16. }
  17. int minOperationsToReachD(int m, int n, int d) {
  18. if (d >= n) return -1; // 无法达到目标
  19. bool visited[1001][1001] = {false}; // 标记状态是否已经访问过
  20. visited[0][0] = true;
  21. State queue[10000]; // 使用数组模拟队列
  22. int front = 0, rear = 0;
  23. queue[rear++] = (State){0, 0, 0}; // 初始状态
  24. while (front != rear) {
  25. State curr = queue[(front++) % 10000];
  26. if (isTargetState(curr, d)) {
  27. return curr.steps;
  28. }
  29. // 尝试各种可能的状态转移
  30. State nextStates[6] = {
  31. {m, curr.y, curr.steps + 1}, // 将第一个杯子倒满
  32. {curr.x, n, curr.steps + 1}, // 将第二个杯子倒满
  33. {0, curr.y, curr.steps + 1}, // 将第一个杯子倒空
  34. {curr.x, 0, curr.steps + 1}, // 将第二个杯子倒空
  35. {curr.x - min(curr.x, n - curr.y), curr.y + min(curr.x, n - curr.y), curr.steps + 1}, // 将第一个杯子倒入第二个杯子
  36. {curr.x + min(curr.y, m - curr.x), curr.y - min(curr.y, m - curr.x), curr.steps + 1} // 将第二个杯子倒入第一个杯子
  37. };
  38. for (int i = 0; i < 6; i++) {
  39. State nextState = nextStates[i];
  40. if (nextState.x >= 0 && nextState.x <= m && nextState.y >= 0 && nextState.y <= n
  41. && !visited[nextState.x][nextState.y]) {
  42. visited[nextState.x][nextState.y] = true;
  43. queue[(rear++) % 10000] = nextState;
  44. }
  45. }
  46. }
  47. return -1; // 无法达到目标
  48. }
  49. int main() {
  50. int m, n, d;
  51. scanf("%d%d%d", &m, &n, &d);
  52. int minOps = minOperationsToReachD(m, n, d);
  53. printf("%d", minOps);
  54. return 0;
  55. }

好数字

  1. #include <stdio.h>
  2. #include <math.h>
  3. // 计算 (base^exponent) mod modulus
  4. unsigned long long power_mod(unsigned long long base,unsigned long long exponent,unsigned long long modulus) {
  5. if (modulus == 1)
  6. return 0;
  7. unsigned long long result = 1;
  8. while (exponent > 0) {
  9. // 如果指数为奇数,乘以 base 并对 modulus 取模
  10. if (exponent % 2 == 1)
  11. result = (result * base) % modulus;
  12. // 将指数减半,底数取平方并对 modulus 取模
  13. exponent = exponent >> 1;
  14. base = (base * base) % modulus;
  15. }
  16. result = result % modulus;
  17. return result;
  18. }
  19. int main() {
  20. unsigned long long n;
  21. int mod = 1000000007;
  22. scanf("%llu", &n);
  23. unsigned long long a, b;
  24. a = (n + 1) / 2;
  25. b = n - a;
  26. unsigned long long result1 = power_mod(5, a, mod);
  27. unsigned long long result2 = power_mod(4, b, mod);
  28. printf("%llu", power_mod(result1*result2, 1, mod));
  29. return 0;
  30. }

佩尔数

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int PA(int n)
  4. {
  5. if (n==0) return 0;
  6. else if (n==1) return 1;
  7. return 2*PA(n-1)+PA(n-2);
  8. }
  9. int PB(int n)
  10. {
  11. int p0=0,p1=1,pn,i;
  12. for (i=0;i<=n;i++)
  13. if (i==0) pn=p0;
  14. else if (i==1) pn=p1;
  15. else {
  16. pn=2*p1+p0;
  17. p0=p1;
  18. p1=pn;
  19. }
  20. return pn;
  21. }
  22. int main()
  23. {
  24. int n;
  25. scanf("%d",&n);
  26. if (n%2==0) printf("%d",PB(n));
  27. else printf("%d",PA(n));
  28. return 0;
  29. }

可变参数累加

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdarg.h>
  4. int Sum(int count,int num, ...)
  5. {
  6. int i,sum=num;
  7. va_list ap;
  8. va_start(ap,num);
  9. for (i=1;i<count;i++){
  10. sum+=va_arg(ap,int);
  11. }
  12. va_end(ap);
  13. return sum;
  14. }
  15. int main()
  16. {
  17. int a,b,c,d,e,f;
  18. scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f);
  19. printf("%d",Sum(2,a,b)-Sum(4,c,d,e,f));
  20. return 0;
  21. }

冰雹序列

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int n;
  6. scanf ("%d",&n);
  7. printf("%d ",n);
  8. while (n!=1){
  9. if (n%2==0&&n!=2) {
  10. printf("%d ",n/2);
  11. n=n/2;
  12. }
  13. else if (n==2) {
  14. printf("1");
  15. n=1;
  16. }
  17. else {
  18. printf("%d ",3*n+1);
  19. n=3*n+1;
  20. }
  21. }
  22. return 0;
  23. }

基思数

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int lsKeith(int n)
  4. {
  5. int wei = 0,i,sum = 0,N,j;
  6. N = n;
  7. while (n != 0){
  8. n = n/10;
  9. wei++;
  10. }
  11. n = N;
  12. int s[wei];
  13. for (i = 0;i < wei;i++){
  14. s[wei-i-1] = n % 10;
  15. sum += s[wei-i-1];
  16. n = n/10;
  17. }
  18. i = 0;
  19. while (1){
  20. for (j = 0;j < wei-1;j++){
  21. s[j] = s[j+1];
  22. }
  23. s[wei-1] = sum;
  24. sum = 0;
  25. while (i <= wei-1){
  26. sum += s[i];
  27. i++;
  28. }
  29. i = 0;
  30. if (sum == N) {
  31. return 1;
  32. break;
  33. }
  34. if (sum > N) {
  35. return 0;
  36. break;
  37. }
  38. }
  39. }
  40. int main()
  41. {
  42. int n;
  43. scanf ("%d",&n);
  44. if (lsKeith(n)) printf("Yes");
  45. else printf("No");
  46. return 0;
  47. }

哈沙得数

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int HarshadNumber(int n)
  4. {
  5. int t = n,s = 0;
  6. while (t){
  7. s = s + t%10;
  8. t = t/10;
  9. }
  10. if (s && n%s == 0) return n/s;
  11. return 0;
  12. }
  13. int main()
  14. {
  15. int n,i = 1,a;
  16. scanf("%d",&n);
  17. if (HarshadNumber(n) == 0) printf("0");
  18. else if (HarshadNumber(n) == 1) printf("1");
  19. else {
  20. while (HarshadNumber(n)){
  21. n = HarshadNumber(n);
  22. a = HarshadNumber(n);
  23. i++;
  24. if (a==0) i--;
  25. if (a == 1) break;
  26. }
  27. printf("%d",i);
  28. }
  29. return 0;
  30. }

二进制表示

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void binary(int num)
  4. {
  5. if (num == 1){
  6. printf("2(0)");
  7. return;
  8. }
  9. if (num == 2){
  10. printf("2");
  11. return;
  12. }
  13. if (num == 3){
  14. printf("2+2(0)");
  15. return;
  16. }
  17. int power = 0;
  18. int temp = num;
  19. while (temp > 1){
  20. temp/=2;
  21. power++;
  22. }
  23. printf("2(");
  24. binary(power);
  25. printf(")");
  26. if (num - (1<<power)!=0){
  27. printf("+");
  28. binary(num-(1<<power));
  29. }
  30. }
  31. int main()
  32. {
  33. int n;
  34. scanf("%d",&n);
  35. binary(n);
  36. return 0;
  37. }

光线追踪

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef long long ll;
  4. ll work(ll a,ll b)
  5. {
  6. if (b == 0)
  7. return -a;
  8. else
  9. return a/b*2*b+work(b,a%b);
  10. }
  11. int main()
  12. {
  13. ll n,x;
  14. scanf("%lld %lld",&n,&x);
  15. ll a,b;
  16. if (n-x>x){
  17. a=n-x;
  18. b=x;
  19. }
  20. else {
  21. a=x;
  22. b=n-x;
  23. }
  24. printf("%lld",n+work(a,b));
  25. return 0;
  26. }

运动会

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int phi[40001];
  4. void eular()
  5. {
  6. phi[1] = 1;
  7. for (int i =2;i <=40000;i++){
  8. if (phi[i] == 0){
  9. for (int j = i;j <= 40000;j += i){
  10. if (phi[j] == 0){
  11. phi[j] = j;
  12. }
  13. phi[j] = phi[j]/i*(i-1);
  14. }
  15. }
  16. }
  17. }
  18. int main()
  19. {
  20. int n;
  21. scanf("%d",&n);
  22. eular();
  23. int ans = 0;
  24. for (int i = 1;i < n;i++){
  25. ans +=phi[i];
  26. }
  27. printf("%d",2 * ans + 1);
  28. return 0;
  29. }

素数

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. bool panduan(int num)
  5. {
  6. if (num < 2){
  7. return false;
  8. }
  9. for (int i = 2;i * i <= num;i++){
  10. if (num % i == 0)
  11. return false;
  12. }
  13. return true;
  14. }
  15. int main()
  16. {
  17. int a,b,num = 0;
  18. scanf ("%d %d",&a,&b);
  19. for (int i = a;i <= b;i++){
  20. if (i % 6 == 1 || i % 6 == 5)
  21. if (panduan(i))
  22. num++;
  23. }
  24. printf ("%d",num);
  25. return 0;
  26. }

可变参数平均

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdarg.h>
  4. double Sum(double count,double num, ...)
  5. {
  6. double i,sum=num;
  7. va_list ap;
  8. va_start(ap,num);
  9. for (i=1;i<count;i++){
  10. sum+=va_arg(ap,double);
  11. }
  12. va_end(ap);
  13. return sum;
  14. }
  15. int main()
  16. {
  17. double a,b,c,d,e;
  18. scanf("%lf %lf %lf %lf %lf",&a,&b,&c,&d,&e);
  19. printf("%.4lf",Sum(2,a,b)/2-Sum(3,c,d,e)/3);
  20. return 0;
  21. }

行列式值

  1. #include<stdio.h>
  2. int square(int n,int arr[100][100]){
  3. if(n==1)
  4. return arr[1][1];
  5. else if(n==2)
  6. return arr[1][1]*arr[2][2]-arr[1][2]*arr[2][1];
  7. else{int ans=0;
  8. int t_arr[100][100];
  9. for(int k=1;k<=n;k++){
  10. int t_i=1;
  11. for(int i=2;i<=n;i++,t_i++){
  12. int t_j=1;
  13. for(int j=1;j<=n;j++){
  14. if(j==k){
  15. continue;
  16. }
  17. t_arr[t_i][t_j]=arr[i][j];
  18. t_j++;
  19. }
  20. }
  21. int sign=(k%2==0)?-1:1;
  22. ans+=arr[1][k]*square(n-1,t_arr)*sign;
  23. }
  24. return ans;
  25. }
  26. }
  27. int main(){
  28. int n;
  29. scanf("%d",&n);
  30. int arr[100][100];
  31. for(int i=1;i<=n;i++)
  32. for(int j=1;j<=n;j++)
  33. scanf("%d",&arr[i][j]);
  34. int ans=square(n,arr);
  35. printf("%d",ans);
  36. return 0;
  37. }

货运优化

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int arr[7];
  6. int res[4]={0,5,3,1};//3*3放完还有这么多个位置可以放2*2
  7. int ans1[1000]={0};
  8. int m = 0;
  9. while (1){
  10. int sum = 0;
  11. int ans = 0;
  12. for (int i = 1;i<7;i++){
  13. scanf("%d",&arr[i]);
  14. sum +=arr[i];
  15. }
  16. if (sum == 0)
  17. break;
  18. ans = arr[6] + arr[5] + arr[4] + (arr[3] + 4 - 1)/4;
  19. int ret2 = 5 * arr[4] + res[arr[3]%4];
  20. if (ret2 < arr[2])
  21. ans += (arr[2] - ret2 + 9 - 1)/9;
  22. int ret1 = ans * 36 - (36 * arr[6] + 25 * arr[5] + 16 * arr[4] + 9 * arr[3] + 4 * arr[2]);
  23. if (ret1 < arr[1])
  24. ans += (arr[1] - ret1 + 36 - 1)/36;
  25. ans1[m] = ans;
  26. m++;
  27. }
  28. for (int i = 0;;i++){
  29. if (ans1[i]==0)
  30. break;
  31. printf("%d\n",ans1[i]);
  32. }
  33. return 0;
  34. }

蒙特卡罗方法求积分

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. double hanshu1(double x)
  5. {
  6. return pow(x,4)*exp(-x);
  7. }
  8. double hanshu2(double x)
  9. {
  10. return x * x + 1;
  11. }
  12. double hanshu3(double x)
  13. {
  14. return cos(x);
  15. }
  16. double hanshu4(double x)
  17. {
  18. return sqrt(x) * (x - 2);
  19. }
  20. double hanshu5(double x)
  21. {
  22. return 2 * sin(x) - 5 * cos(x);
  23. }
  24. double func(int m,double x)
  25. {
  26. switch(m){
  27. case 1:return hanshu1(x);
  28. case 2:return hanshu2(x);
  29. case 3:return hanshu3(x);
  30. case 4:return hanshu4(x);
  31. case 5:return hanshu5(x);
  32. default:return -1;
  33. }
  34. }
  35. double jifen(int m,double a,double b,int n)
  36. {
  37. srand(RAND_MAX);
  38. double w = b - a,sum = 0;
  39. for(int i = 1;i<n;++i){
  40. double x = ((double)rand()/RAND_MAX) * w + a;
  41. sum += func(m,x);
  42. }
  43. sum *= w / n;
  44. return sum;
  45. }
  46. int main()
  47. {
  48. int m,n;
  49. double a,b;
  50. scanf ("%d %lf %lf %d",&m,&a,&b,&n);
  51. printf("%lf",jifen(m,a,b,n));
  52. return 0;
  53. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/734784
推荐阅读
相关标签
  

闽ICP备14008679号