由于疫情原因,网络复试,6道编程题。
//1、写程序,输入数组a[n],输出a[0]!+a[1]!+......+a[n-1]!的值。(15分)
#include
//单个数的阶乘
double Factorial(int n) {
double sum = 1;
for (int i = 1; i < n; i++) {
sum *= i;
}
return sum;
}
//对数组的每个元素求阶乘相加
double Array_Factorial(int* s, int n) {
double sum = 0;
for (int i = 0; i < n; i++) {
sum += Factorial(s[i]);
}
return sum;
}
//测试样例
int main()
{
int a[10];
double c=10;
for (int i = 0; i < 10; i++) {
a[i] = i+1;
}
c = Array_Factorial(a,10);
printf("结果是:%f",c);
}
2、写程序,求区间[200,3000]中所有包含数字k(k为输入,0<=k<=9)的回文数
(回文数是正读与反读都是一样的数,如525、1551)。(15分)
//判断是否是包含k 的回文数
int isPalindrome(int n,int k) {
int n1, n2, n3, n4;
//分别取数的千,百,十,个位上的数
n1 = n / 1000;
n2 = (n % 1000) / 100;
n3 = (n % 100) / 10;
n4 = n % 10;
int m;
//如果是四位数
if (n1 != 0) {
m = n4 * 1000 + n3 * 100 + n2 * 10 + n1;
}
//如果是三位数
else
{
m = n4 * 100 + n3 * 10 + n2;
}
if (n == m && (n1==k || n2==k || n3==k || n4==k))
return 1;
else
{
return 0;
}
}
//测试样例
int main()
{
int i, k;
scanf("%d", &k);
for (i = 200; i <= 3000; i++) {
if (isPalindrome(i,k) == 1)
printf("%dn", i);
}
}
3、写程序,输入俩个数组A和B,输出俩个数组的公共元素(重复的公共元素只输
出一次)。例如:输入A=1 2 3 4 3 5,B=2 3 7 6.输出结果为:2 3。(15分)
#include
int main(){
int a[10],b[10];
for (int i = 0; i < 10; i++)
scanf("%d",&a[i]);
for (int i = 0; i < 10; i++)
scanf("%d",&b[i]);
int sum=0;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if(a[i]==b[j])
{
printf("%d", a[i]);
break;
}
}
}
return 0;
}
4、写程序,输入一行字符,分别统计出其中英文小写字母、大写字母、空格、
数字和其它字符的个数。(15分)
#include
int main(){
int c1 = 0, c2 = 0, num = 0, space = 0, other = 0;
char ch;
while ((ch = getchar()) != 'n') {
if (ch <= 'z' && ch >= 'a') {
c1++;
}
else if(ch<='9'&&ch>='0') {
num++;
}
else if (ch <= 'Z' && ch >= 'A') {
c2++;
}
else if (ch==' ') {
space++;
}
else {
other++;
}
}
printf("%d %d %d %d %d",c1,c2,num,space,other);
}
5、写程序,输入一个自然数N,输出一个整数M>0使得M是N的倍数,并且M的十进制
表示只包含0或1.求最小的M。例如:N=4,M=100。(20分)
#include
//判断是否是01组成的十进制数
int isNum(int n) {
while (n) {
if (n % 10 > 1)
return 0;
else n /= 10;
}
return 1;
}
int main(){
int N;
int M;
scanf("%d", &N);
for (int i = 2;; i++) {
if (isNum(i * N)) {
M = i * N;
printf("%dn", M);
break;
}
}
}
6、写程序,输入一个只含有+1和-1的序列,输出和最大的子序列的和。例如:
序列+1 -1 -1 +1 +1 -1 +1 -1 -1 +1 的和最大的子序列之和为3
(最大子序列为+1 +1 -1 +1 +1)。(20分)
#include
//求最大子序列和
int MaxSubsequence(int* a) {
int sum = a[0];
int maxsum = a[0];
for (int i = 1; i < 11; i++) {
sum += a[i];
printf("%dn", sum);
if (sum < 0) {
sum = 0;
}
else if (sum > maxsum)
{
maxsum = sum;
}
}
return maxsum;
}
//测试样例
int main() {
int a[11];
for (int i = 0; i < 11; i++) {
scanf("%d",&a[i]);
}
for (int i = 0; i < 11; i++) {
printf("%d ", a[i]);
}
printf("n");
}