山东大学计算机导论与程序设计基础限时测试一

A : 简单罗马数字

题目描述

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。现在我们只考虑 I, V, X。

我们知道,I 的数值为 1,V 的数值为 5,X 的数值为 10。

例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。

现在给定一个罗马数字,将其转换成整数。

输入格式

共 2 行。第一行为一个正整数n (0<n<10),代表字符串的长度。第二行为长度为n的字符串,只含 I,V,X 并保证符合罗马数字规范。

输出格式

罗马数字转换成的整数。

完整答案代码

#include<stdio.h>
int main()
{
	int n,X,I,V;
	scanf("%d\n",&n);
	char a[n];
	int i;
	int sum=0;
	for(i=0;i<n;i++){
		scanf("%c",&a[i]);
	}
	
	for(i=0;i<n;i++){
		if(a[i]=='X'){
			sum+=10;
		}else if(a[i]=='V'){
			sum+=5;
		}else if(a[i]=='I'){
			sum+=1; 
		}
		if(a[i]=='I'&&a[i+1]=='X'){
			sum-=2;
		}else if(a[i]=='I'&&a[i+1]=='V'){
			sum-=2;
		}
		
	}
	printf("%d\n",sum);
	return 0;
 } 

B : 完全平方数

题目描述

给定 n 个数,判断这 n 个数中完全平方数的数量,完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,149 和 16 都是完全平方数,而 3 和 11 不是。

输入格式

共 2 行数。

第一行为数组长度n,0<n≤1000。

第二行为 n 个数。数据大于 0,小于 1000

输出格式

一个数,为 n 个数中完全平方数的个数。

完整答案代码

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

C : 颜色分类

题目描述

给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

输入格式

共 2 行数。

第一行为数组长度n,0<n≤1000。

第二行为 n 个数,表示颜色。取值范围为[0,2]

输出格式

排好序的数组。

完整答案代码

#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int a[n];
	int i,t,j;
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	} 
	for(i=0;i<n;i++){
		for(j=i+1;j<n;j++){	
			if(a[i]>=a[j]){
				t=a[j];
				a[j]=a[i];
				a[i]=t;
			}
		}
	}
	for(i=0;i<n;i++){
		printf("%d ",a[i]);
	}
	return 0;
}

D : 简单括号匹配

题目描述

有一串由 ( 和 ) 组成的字符串,请你检测这串字符串是否符合语法。

符合语法即:

  • 对于每个 (,都有 ) 与之对应,例如 (()()),16,23,45 位置的括号相互对应。
  • ) 不能出现在与之对应的 ( 之前,如 )(

输入格式

共 2 行,第一行为 1 个正整数n (0<n<1000) ,代表字符串长度。第二行为长度为n的字符串,只含 ( 和 )

数出格式

共 1 行,为字符串 Yes 或 No,代表字符串是否合法。

完整答案代码

#include<stdio.h>
int main()
{
	int n;
	scanf("%d\n",&n);
	char a[n];
	int i,j;
	int t=0;
	for(i=0;i<n;i++){
		scanf("%c",&a[i]);		
	}
	if(n%2==0){
		for(i=0;i<n;i++){
			if(a[i]=='('){
				t+=1;
			}else{
				t-=1;
			}
			if(t==-1){
				printf("No\n");
				break;
			}
		}
	}
	if(t!=-1){
		if(t==0){
			printf("Yes\n");
		}else{
			printf("No\n");
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值