1【找规律】编程求出序列的后面指定的n个数。
2【读写序列】编程求出序列的下一行。
1 3
1 1 1 3
3 1 1 3
1 3 2 1 1 3
1 1 1 3 1 2 2 1 1 3
3 1 1 3 1 1 2 2 2 1 1 3
1 3 2 1 1 3 2 1 3 2 2 1 1 3
1 1 1 3 1 2 2 1 1 3 1 2 1 1 1 3 2 2 2 1 1 3
……
3【数学黑洞】编程验证:数平方和运算的怪圈、数学黑洞 153、卡普雷卡尔常数、西西弗斯串。(任选其二)
//西西弗斯串
1, 2, 4, 7, 8, 11, 14, 16, 17, 19, 22, 26, 28, 29, 41, 44, ?
- /*【找规律】编程求出序列的后面指定的n个数。
- **1, 2, 4, 7, 8, 11, 14, 16, 17, 19, 22, 26, 28, 29, 41, 44, ?
- ×规律是不能是3 5 的倍数,以及不能含有3 或 5
- */
- #include<stdio.h>
- int main()
- {
- int n;
- printf("input n:");
- scanf("%d",&n);
- int i = 1;
- while(n > 0){
- if((i%3 != 0)&&(i%5!=0)){//初略判断
- int j = i;
- while(j){//判断其余各位是不是符合要求
- //分别求个位十位百位。。。
- if ((j % 10 == 3) || (j % 10 == 5)){
- break;
- }
- else{
- j /= 10;
- }
- }
- if (j == 0){
- printf("%d\t", i);
- --n;
- }
- }
- ++i;
- }
- return 0;
- }
2【读写序列】编程求出序列的下一行。
1 3
1 1 1 3
3 1 1 3
1 3 2 1 1 3
1 1 1 3 1 2 2 1 1 3
3 1 1 3 1 1 2 2 2 1 1 3
1 3 2 1 1 3 2 1 3 2 2 1 1 3
1 1 1 3 1 2 2 1 1 3 1 2 1 1 1 3 2 2 2 1 1 3
……
- /*
- 编程求出序列的下一行。
- 1 3
- 1 1 1 3
- 3 1 1 3
- 1 3 2 1 1 3
- 1 1 1 3 1 2 2 1 1 3
- 3 1 1 3 1 1 2 2 2 1 1 3
- */
- #include<iostream>
- #include<string.h>
- #define MAX 200
- using namespace std;
- void ruler(int *m,int *n);
- int main()
- {
- int a[MAX + 10];
- int b[MAX + 10];
- //变为0
- memset(a,0,sizeof(a));
- memset(b,0,sizeof(b));
- //初始化a
- a[0] = 1;
- a[1] = 3;
- int nLine;
- cin>>nLine;//n行输入
- int num = nLine/2;
- while(num){
- ruler(a,b);
- ruler(b,a);
- --num;
- }
- if(nLine%2 == 1){
- ruler(a,b);
- }
- }
- void ruler(int *m,int *n)
- {
- //m 代表已知的那一行,n 是要求的,
- int i,j;//i j 分别为m ,n 的
- i = j = 0;
- int sum = 1;//对m中的个数统计
- for(;m[i] != 0;++i){
- if(m[i] == m[i+1]){
- ++sum;
- }
- else{
- n[j] = sum;
- n[++j] = m[i];
- sum = 1;
- ++j;
- }
- }
- //输出打印新的,也就是n
- for(i = 0;n[i] != 0;++i){
- cout<<n[i]<<" ";
- }
- cout<<endl;
- }
可以证明只需要验证一部分,
- //数平方和运算的怪圈
- #include<stdio.h>
- bool isresult(int n);
- int main()
- {
- for(int num = 1;num <= 999;++num){
- if(isresult(num) == true){
- //printf("%d\n",num);
- }
- else{
- printf("%d is not\n",num);
- }
- }
- return 0;
- }
- bool isresult(int n)
- {
- int sum = 0;
- //求sum
- while(n){
- int temp = n%10;
- sum += temp*temp;
- n /= 10;//从个位开始求每一位
- }
- //判断
- if((sum == 1)||(sum == 145)){
- return true;
- }
- else{
- return isresult(sum);
- }
- }
- #include<iostream>
- //输出不能达到的数,和能的数
- using namespace std;
- bool is123(int n);
- int main()
- {
- int num;
- for(num = 1;num <= 999;++num){
- if(is123(num) == true){
- //cout<<num<<"is"<<endl;
- continue;
- }
- else{
- cout<<num<<"is not"<<endl;
- continue;
- }
- }
- return 0;
- }
- bool is123(int n)
- {
- int oshu,jishu,weishu;
- //分别是偶数,奇数,位数
- int endnum = 0;
- oshu = jishu = 0;
- if(n >= 100){
- weishu = 3;
- if((n/100%2) == 0){
- ++oshu;
- }
- else{
- ++jishu;
- }
- if((n/10%10%2) == 0){
- ++oshu;
- }
- else{
- ++jishu;
- }
- if((n%100%2) == 0){
- ++oshu;
- }
- else{
- ++jishu;
- }
- }
- else if(n >= 10){
- weishu = 2;
- if((n/10%2) == 0){
- ++oshu;
- }
- else{
- ++jishu;
- }
- if((n%10%2) == 0){
- ++oshu;
- }
- else{
- ++jishu;
- }
- }
- else{
- weishu = 1;
- if((n%2) == 0){
- ++oshu;
- }
- else{
- ++jishu;
- }
- }
- endnum = oshu*100+jishu*10+weishu;
- if(endnum == 123)
- return true;
- else{
- return is123(endnum);
- }
- }