2018西工大计算机机试代码参考

(题目来源--西工大计算机微信公众号)

1.求积:给定n组数,每组两个整数,输出这两个整数的乘积

Input:
2
1 1
2 3
 
Output:
1
6

参考代码: 

#include<stdio.h>
int main(){
	int n;
	scanf("%d",&n);
	while(n--){
			int i,j,m;
	                scanf("%d %d",&i,&j);
	                m=i*j;
	                printf("%d\n",m);
	}
	return 0;

}

2.阶乘:给定n组数,每组一个整数,输出该组数的阶乘;

Input:
2 
3 
5

Output:
6
120

参考代码: 

#include<stdio.h>
int fact(int s){
	int i,a=1;
	for(i=1;i<=s;i++)
		a=a*i;
	return a;
}
int main()
{
	int b[10],i,n,sum;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&b[i]);
	for(i=0;i<n;i++){
			sum=fact(b[i]);
		        printf("%d\n",sum);
	}
	return 0;
}

3.C(n,m):求出n个数中任取m个数的不同取法个数:

Input:
10 3

Output:
120

参考代码: 

#include<stdio.h>
double fact(double s)  //定义函数fact 求n!
{
   double i,a=1;
   for (i=1;i<=s;i++)
      a=a*i;
   return a;
}
int main()
{
   double x,y,m,n;
   printf("Enter n: ");
   scanf("%lf",&n);
   printf("Enter m: ");
   scanf("%lf",&m);
   y=fact(n-m);
   m=fact(m);
   n=fact(n);
   x=n/(y*m);
   printf("%.0f",x);
   return 0;
}

4.给定n组数,每组m个,对每组数进行从小到大排序:

Input:
2 4
3 5 2 8
2 7 9 8

Output:
2 3 5 8
2 7 8 9

参考代码: 

2019年原题

5.字符串反转:给定n组字符串,每组字符串不超过20,输出每组字符串的反串:

Input:
3
nwpu
china
xi an

Output:
upwn
anihc
na ix

参考代码:

#include <stdio.h>
#include <string.h>
int main()
{
	int n;
	scanf("%d",&n);
	getchar();
        while(n--){
	char str1[1000];
	gets(str1);
        int len_str=strlen(str1);
        char tmp;//注意是字符串
        for(int i=0;i<len_str/2;i++){

                tmp=str1[i];
                str1[i]=str1[len_str-1-i];
                str1[len_str-1-i]=tmp;
                }
	printf("%s\n",str1);
	}
	return 0;

}

6.判断是否回文:(包括空格 数字 英文 符号) ,若是输出yes,否则输出no;

Input:
4
nwpu
madam
1001
xi ix

Output:
no
yes
yes
yes

参考代码: 

#include <stdio.h>
#include <string.h>
#define N 100        //定义存储字符串的数组大小
int main(void)
{
	int n;
	scanf("%d",&n);
	getchar();
	while(n--){
    char str[N];
    int i,j,flag=1;  //定义int型变量flag,作为判断是否回文的标志
    printf("请输入字符串:");
    gets(str);       //把输入的字符串存入数组
    i=strlen(str)-1; //下标从0开始,最后字符下标为字符串长度-1
    for(j=0;j<=i;i--,j++)
          if(str[i]!=str[j])
        {
            flag=0;  //只要有一对相比较的字符不同,则置flag为0
            break;
        }
    if(!flag)        //若flag非真,即为0,则输出不是回文
        printf("不是回文\n");
    elsefv
        printf("是回文\n");
	}
    return 0;
}

7.判断括号是否匹配:给定n组数,每组为一个字符串,测试三种括号:{}()[],且顺序都是前左括号,后右括号,括号之间可以嵌套。若匹配则输出yes,否则输出no;

如:{%%}(qq:3414028995){()} 和{[(9)]}都是匹配的;

Input:
3
{9}[00](tt)
{[](}

Output:
yes
no

参考代码:

#include<stdio.h>
#include<string.h>
#define MAX_SIZE 1000
void check(int T){
	char str[MAX_SIZE];
	while(T--){
	int flag=1;
	//统计小括号中括号和大括号的数量
	int fa=0,fb=0,fc=0,fd=0,fe=0,ff=0;
	cin>>str;
	int len=strlen(str);
	for(int i=0;i<len;i++){
			switch(str[i]){
				case '[':fa++;break;
				case ']':fb++;break;
				case '(':fc++;break;
				case ')':fd++;break;
				case '{':fe++;break;
				case '}':ff++;break;
			}
			if(i==0)
				continue;
			/*	
				//当括号为)(判断其合法性;
			if(str[i]=='('&&str[i-1]==')'){
				flag=0;break;

			}
            */


	}
	if(fa!=fb||fc!=fd||fe!=ff)//判断括号数量是否匹配,如果不匹配,则不合法;
		flag=0;
	if(flag==1)
		printf("Yes\n");
	else
		printf("No\n");
	}
}
int main(){
	int t=0;
	printf("%d",&t);
	check(t);
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/lixiaohulife/article/details/89739204