生活随笔
收集整理的這篇文章主要介紹了
简单数学编程题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 1019 數字黑洞
- 問題 A: 守形數
- 問題 B: 反序數
- 問題 C: 百雞問題
- 問題 D: abc
- 問題 E: 眾數
- 問題 F: 計算兩個矩陣的乘積
- 問題 G: 加法等式
- 問題 H: 整數和
- 問題 I: 反序相等
- 問題 J: 多項式的值
- 問題 K: 迭代求立方根
- 問題 L: 與7無關的數
- 問題 M: 雞兔同籠
1019 數字黑洞
https://pintia.cn/problem-sets/994805260223102976/problems/994805302786899968
思路:
用數組保存每位的數字,并用bool數組標記一下。
根據bool數組 判斷各個數字是不是完全的相同,
相同根據題目輸出
不相同用sort排序后 計算最大值 和最小值。
用差接著重復執行上面的步驟直到差為6174。
注意事項:
每次執行一次后都要重新的清零。
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std
;
int main(void)
{int n
;int temp
;int sum1
,sum2
;int count
;while( cin
>>n
){ bool flag
=false;while(!flag
) {temp
=n
;bool hush
[10]={false};int a
[4]={0};int i
=0; while(n
){a
[i
]=n
%10;hush
[a
[i
]]=true;n
=n
/10;i
++;}count
=0;if(i
!=4)count
++;for(i
=0;i
<10;i
++){if(hush
[i
]){count
++;}}if(count
==1){printf("%d - %d = 0000\n",temp
,temp
);flag
=true;}sort(a
,a
+4);sum1
=a
[0]*1000+a
[1]*100+a
[2]*10+a
[3];sum2
=a
[3]*1000+a
[2]*100+a
[1]*10+a
[0];if(!flag
) printf("%04d - %04d = %04d\n",sum2
,sum1
,sum2
-sum1
);n
=sum2
-sum1
;if(n
==6174)flag
=true;}}return 0;
}
書上的代碼:
#include<cstdio>
#include<algorithm>
using namespace std
;
bool cmp(int a
,int b
)
{return a
>b
;
}
void to_array(int n
,int num
[])
{for(int i
=0;i
<4;i
++){num
[i
]=n
%10;n
=n
/10;}
}
int to_number(int num
[])
{int sum
=0;for(int i
=0;i
<4;i
++){sum
=sum
*10+num
[i
];}return sum
;
}
int main(void)
{int n
,min
,max
;scanf("%d",&n
);int num
[5];while(1){to_array(n
,num
);sort(num
,num
+4);min
=to_number(num
);sort(num
,num
+4,cmp
);max
=to_number(num
);n
=max
-min
;printf("%04d - %04d = %04d\n",max
,min
,n
);if(n
==0||n
==6174){break; }} return 0;
}
問題 A: 守形數
http://codeup.cn/problem.php?cid=100000588&pid=0
注意的是: 76^2=5776 這樣的也是守形數
思路:
(36-6) %10 等于0
(625-25)%100等于0
(5776-76)%100等于0
綜上所述可以得出如下的結論 :
(n*n-n) % 10n的位數 ==0
#include<cstdio>
int main(void)
{int n
;int max
;int sum
=1;while( scanf("%d",&n
) != EOF ){sum
=1;max
=n
*n
;int temp
;temp
=n
;while(temp
){sum
*=10;temp
=temp
/10;}if( (max
-n
) % sum
== 0){printf("Yes!\n");}else{printf("No!\n");}}return 0;
}
問題 B: 反序數
http://codeup.cn/problem.php?cid=100000588&pid=1
#include<stdio.h>
int main(void)
{for(int i
=1000;i
<=9999;i
++){int sum
=i
*9;int sum2
=0;int temp
=i
;int a
[5]={0};if(sum
>9999)continue;int j
=0; while(temp
){a
[j
]=temp
%10;j
++;temp
=temp
/10;}sum2
=a
[0]*1000+a
[1]*100+a
[2]*10+a
[3];if(sum2
==sum
)printf("%d\n",i
);}return 0;
}
問題 C: 百雞問題
http://codeup.cn/problem.php?cid=100000588&pid=2
#include<cstdio>
int main(void)
{int n
;double sum
=0;while( scanf("%d",&n
) != EOF ){for(int i
=0;i
<=100;i
++){for(int j
=0;j
<=100;j
++){for(int z
=0;z
<=100;z
++){sum
=i
*5+j
*3+z
*(1/3.0);if(sum
<=n
&&(i
+j
+z
==100))printf("x=%d,y=%d,z=%d\n",i
,j
,z
); }}}}
}
問題 D: abc
http://codeup.cn/problem.php?cid=100000588&pid=3
#include<cstdio>
int main(void)
{for(int i
=0;i
<=9;i
++){for(int j
=0;j
<=9;j
++){for(int k
=0;k
<=9;k
++){int sum1
=i
*100+j
*10+k
;int sum2
=j
*100+k
*11;if(sum1
+sum2
==532){printf("%d %d %d\n",i
,j
,k
);}}}}return 0;
}
問題 E: 眾數
http://codeup.cn/problem.php?cid=100000588&pid=4
#include<cstdio>
int main(void)
{int a
[11]={0};int number
;int index
;while( scanf("%d",&number
) != EOF ){a
[number
]++;for(int i
=0;i
<19;i
++){scanf("%d",&number
);a
[number
]++;} int max
=-1;for(int i
=1;i
<=10;i
++){if(a
[i
]>max
){max
=a
[i
];index
=i
;}a
[i
]=0;}printf("%d\n",index
);}return 0;
}
問題 F: 計算兩個矩陣的乘積
http://codeup.cn/problem.php?cid=100000588&pid=5
#include<cstdio>
int main(void)
{int a
[2][3]={0};int b
[3][2]={0};int sum1
,sum2
,sum3
,sum4
;while( scanf("%d",&a
[0][0]) != EOF ){scanf("%d",&a
[0][1]);scanf("%d",&a
[0][2]);for(int i
=0;i
<3;i
++){scanf("%d",&a
[1][i
]);}for(int i
=0;i
<3;i
++){for(int j
=0;j
<2;j
++){scanf("%d",&b
[i
][j
]);}}sum1
=0;for(int i
=0;i
<3;i
++){sum1
=sum1
+a
[0][i
]*b
[i
][0];}sum2
=0;for(int i
=0;i
<3;i
++){sum2
=sum2
+a
[0][i
]*b
[i
][1];}sum3
=0;for(int i
=0;i
<3;i
++){sum3
=sum3
+a
[1][i
]*b
[i
][0];}sum4
=0;for(int i
=0;i
<3;i
++){sum4
=sum4
+a
[1][i
]*b
[i
][1];}printf("%d %d\n%d %d\n",sum1
,sum2
,sum3
,sum4
);}return 0;
}
問題 G: 加法等式
http://codeup.cn/problem.php?cid=100000588&pid=6
#include<cstdio>
int main(void)
{for(int i
=0;i
<=9;i
++){for(int j
=0;j
<=9;j
++){for(int k
=0;k
<=9;k
++){int sum1
=i
*100+j
*10+k
;int sum2
=j
*100+k
*11;if(sum1
+sum2
==532){printf("%d %d %d\n",i
,j
,k
);}}}}return 0;
}
問題 H: 整數和
http://codeup.cn/problem.php?cid=100000588&pid=7
#include<cstdio>
#include<cmath>
int main(void)
{int N
,n
;while(scanf("%d",&n
) != EOF ){while(n
){scanf("%d",&N
);int sum
=0;for(int i
=abs(N
);i
<=2*abs(N
);i
++){sum
=sum
+i
;}if(N
<0){sum
=sum
*-1;}printf("%d\n",sum
);n
--;}}return 0;
}
問題 I: 反序相等
http://codeup.cn/problem.php?cid=100000588&pid=8
#include<stdio.h>
int main(void)
{for(int i
=1000;i
<=9999;i
++){int sum
=i
*9;int sum2
=0;int temp
=i
;int a
[5]={0};if(sum
>9999)continue;int j
=0; while(temp
){a
[j
]=temp
%10;j
++;temp
=temp
/10;}sum2
=a
[0]*1000+a
[1]*100+a
[2]*10+a
[3];if(sum2
==sum
)printf("%d\n",i
);}return 0;
}
問題 J: 多項式的值
http://codeup.cn/problem.php?cid=100000588&pid=9
#include<cstdio>
#include<cmath>
int F(int a
[],int max
,int x
)
{int sum
=0;int m
=max
;for(int i
=0;i
<=max
;i
++){sum
=sum
*x
+a
[m
--];}return sum
;
}
int main(void)
{int n
;scanf("%d",&n
);{while(n
){int max
;int a
[15]={0};scanf("%d",&max
);for(int i
=0;i
<=max
;i
++){scanf("%d",&a
[i
]);}int x
;scanf("%d",&x
);printf("%d\n",F(a
,max
,x
));n
--;}}return 0;
}
問題 K: 迭代求立方根
http://codeup.cn/problem.php?cid=100000588&pid=10
#include<cstdio>
#include<cmath>
double F(int x
,int n
)
{double sum
=x
;for(int i
=1;i
<=n
;i
++){sum
=sum
*2/3.0+x
/(3*sum
*sum
);}return sum
;
}
int main(void)
{int n
,x
;while( scanf("%d %d",&x
,&n
) != EOF ){printf("%.6lf\n",F(x
,n
));}return 0;
}
問題 L: 與7無關的數
http://codeup.cn/problem.php?cid=100000588&pid=11
#include<cstdio>
#include<cmath>
bool judge(int n
)
{if(n
%7==0)return false;while(n
){if(n
%10==7)return false;n
=n
/10;}return true;
}
int main(void)
{int n
;while( scanf("%d",&n
) != EOF ){int sum
=0;for(int i
=1;i
<=n
;i
++){if(judge(i
))sum
+=i
*i
;}printf("%d\n",sum
);}return 0;
}
問題 M: 雞兔同籠
http://codeup.cn/problem.php?cid=100000588&pid=12
#include<cstdio>
#include<cmath>
int main(void)
{int n
;while( scanf("%d",&n
) != EOF ){while(n
){int N
;scanf("%d",&N
);int max
,min
;max
=min
=0;if(N
%2==0){max
=N
/2;if(N
%4)min
=N
/4+1;elsemin
=N
/4;}printf("%d %d\n",min
,max
);n
--;}}return 0;
}
總結
以上是生活随笔為你收集整理的简单数学编程题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。