(题目来源--西工大计算机微信公众号)
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;
}