欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > 【算法】刷题记录

【算法】刷题记录

2025/9/15 14:58:34 来源:https://blog.csdn.net/qq_41775119/article/details/88903114  浏览:    关键词:【算法】刷题记录

计划:从15年校内选拔C-A逐渐开始刷

15年-C1
二项式的系数规律,我国数学家很早就发现了。

如【图1.png】,我国南宋数学家杨辉1261年所著的《详解九章算法》一书里就出现了。

其排列规律:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1

如下的程序,用来建立N行的杨辉三角形。请填写划线部分缺少的代码。

注意:只填写划线部分的代码,不要填写任何多余的内容。

#define N 8
int main()
{int a[N][N];int i,j;for(i=0; i<N; i++){a[i][0] = 1;a[i][i] = 1;}for(i=1; i<N; i++){for(j=1; j<i; j++)  ___________________________;}填空答案:a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=0; i<N; i++){for(j=0; j<=i; j++)	printf("%-5d", a[i][j]);printf("\n");}return 0;
}

15年-C2
1/1 + 1/2 + 1/3 + 1/4 + … 在数学上称为调和级数。

它是发散的,也就是说,只要加上足够多的项,就可以得到任意大的数字。

但是,它发散的很慢:

前1项和达到 1.0
前4项和才超过 2.0
前83项的和才超过 5.0

那么,请你计算一下,要加多少项,才能使得和达到或超过 15.0 呢?

请填写这个整数。

注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。
用程序跑一下便知。。。


C3
有如下的加法算式。其中每个汉字代表一个数字。
(如果存在对齐问题,可参见【图1.png】)

               年大年过大年能过大年怎能过大年我怎能过大年
+  让我怎能过大年
------------------能能能能能能能

请填写“让我怎能过大年” 所代表的整数。
所有数字连在一起,中间不要空格。例如:“3125697”。当然,这个不是正确的答案。

注意:只填写一个整数,不要填写任何多余的内容。

暴力? 一开始想着套7层循环 但实在是感觉复杂度太高了。。。

#include<stdio.h>
int main()
{int sum;int i;int temp;int a,b,c,d,e,f,g;//代表每一位上的数字 for(i=9992299;i>=1000000;i--){a = i%10;//个位b = i/10%10;//十位 c = i/100%10;//百位 d = i/1000%10; //千位e = i/10000%10;//万位f = i/100000%10;//十万位g = i/1000000%10;//百万位 //printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\n",a,b,c,d,e,f,g);//break; temp=d*1000000+d*100000+d*10000+d*1000+d*100+d*10+d*1; //printf("%d\n",temp);//break;a=0+a*1;b=a+b*10;c=b+c*100;d=c+d*1000;e=d+e*10000; f=e+f*100000;g=f+g*1000000;  //也可以直接g=i; //printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\n",a,b,c,d,e,f,g);//break; sum=a+b+c+d+e+f+g;if(sum==temp){printf("%d\n",i);break;}	}return 0;
}

15年-C4

1193是个素数,对它循环移位后发现:
1931,9311,3119也都是素数,这样特征的数叫:循环素数。
你能找出具有这样特征的5位数的循环素数吗?
当然,这样的数字可能有很多,请写出其中最大的一个。
注意:答案是个5位数,不要填写任何多余的内容。
我的思路:99999 ~ 11111的n的降序循环 里面套一层五次循环移位的循环 顺便判断一个函数即判断是否是素数( 模2 ~ 根号n的循环 如果都模不等于0则返回它 )然后程序结束
注意有一个难点是 循环移位

int fun(int n)
{int a = n%10;//取出最后一位  比如12345得出a=5 int b = n/10;//取出前面4位                b=1234return a*10000+b; //经典的循环返回, 5*10000+1234=51234
} 

15年-C5
把一个整数的每个数位都平方后求和,又得到一个整数,我们称这个整数为:位平方和。
对新得到的整数仍然可以继续这一运算过程。
比如,给定整数为4,则一系列的运算结果为:
16,37,58,89,…
本题的要求是,已知一个整数x,求第n步的运算结果。
数据格式要求:
输入,两个整数x n,中间以空格分开。表示求x的第n步位平方和。其中,x,n都大于0,且小于100000。
输出,一个整数,表示所求结果。
例如,
输入:
4 3
则程序应该输出:
58
再例如,
输入:
1314 10
则程序应该输出:
20
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。

一开始被这个资源约定的限制吓到了,但实则就是一个很基础的题目

#include<stdio.h>
//传入一个数计算各位上数字的平方然后求他们位之和 
int fun(int n)
{int res

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com