nb复试上机题
复试野题
1.封建的小张
题目:小张明天要去车管所申请车牌号,可他比较封建。不喜欢包含4或者S的号码。于是小张就在家忐忑不安,寻愿明天能否撞上好远,拿到一个理想的车牌号。请您给入10个长度为8的字符捧代教车牌号,每个字符串占一行且只包含大写字母或者数字,如果有理想的车牌号,请验出最先找到的那个车牌号;如果我不到,请隆出“Not found”.
测试数据:
G5467212
P7777141
P7777141
Q8768080
P7777141
A8888888
B8888888
C8888888
D8888888
E9999999
输出结果:
Q8768080
解决方法:
#include<stdio.h>
#include<string.h>
int main(){
char str[8];
int n=0,i;
while(n<10){
scanf("%s",str);
for(i=0;i<8;i++){
if( (str[i] >='A'&& str[i] <= 'Z')||(str[i] >= '0'&& str[i] <='9')){
if(str[i]=='S'||str[i]=='4'){
n++;
break;//直接看下一个车牌
}
}
}
if(i==8){
printf("%s\n",str);
return 0;
}
}
printf("%s\n","Not found");
return 0;
}
2.小张的校验(文件、质数)
题目:现有若干个整数,需要通过网络传给到另外一个地方,但有时候阿络不稳定,会出现接收到的数据出现错误的情况。小张发明了一套方法,他把有用的数据放在第1,3.5..个位置,而把第2,4,6,...等位置设成随机的质数;这些质数并不是有用的信息,只是起到校验作用,当对方接到数据以后,如果发现第2.4.6.等位置上只要有一个数不是质数,那么就判定"数据被篡改”;要不然认为”数据正确无误”,现在有一个文本文件“numbers.txt”,里面存放了接受到的若干个整数,每个整数占一行。请您读取这个文件文件,判断它里面的数据是否被改?
(说明:文件 numbers txt请你自己用notepad创建)
#include<stdio.h>
#include<string.h>
int isPrime(int n);
int main()
{
char p[100];
FILE *fp=fopen("number.txt","r");
if(!fp){
printf("can't open file\n");
return -1;
}
while(!feof(fp)){
fscanf(fp,"%s",p);
}
fclose(fp);
int error=0;
int len =strlen(p);
for(int j=0;j<len;j++){
if(j%2==1){
if(isPrime(p[j])==1){
error=1;
}
}
}
if(error==0)
printf("%s","数据正确无误");
else if(error==1)
printf("%s","数据被篡改");
}
int isPrime(int n)
{
n=n-48;
int i,flag=1;
if(n==1)
return 1;
for(i=2;i<=n-1;i++)
if(n%i==0){
flag=0;
break;
}
if(flag==1)
return 0;//是质数
else
return 1;//不是质数
}
3.笑笑买贺卡(贪心算法)
题目:新年快到了,笑笑打算给他的好朋友们发贺年卡,而且它已经选好了自己要购买的贺卡的样式.俗话说得好,货比三家,笑笑来到了商店,看了各个商铺这种贺卡的价钱.不仅如此,笑笑还记住了每个商铺的存货量.已知笑笑打算购买m 张贺卡,问他最少花多少钱.
输入格式:
第一行有两个整数m 和n .其中m 表示要购买贺年卡的数量,n 表示商铺的个数.
以下n 行,每行有两个整数,分别表示该商铺这种贺年卡的单价和存货量.
输出格式:
仅一个数,表示笑笑所花的最少钱数.
输入样例:
要买 行
10 4
单价 存货量
4 3
6 2
8 10
3 6
输出样例:
36
数据规模:
0 < m ,n ≤ 1000
可以保证最后的结果在长整型范围内,商铺的总存货量不少于m .
测试数据:
10 4
4 3
6 2
8 10
3 6
输出结果:
36
解决方法:
#include <stdio.h>
struct shop{
int price;
int store;
};
int main(){
int m,n,i,j;
scanf("%d%d",&m,&n);
struct shop p[n];
for(i=0;i<n;i++){
scanf("%d%d",&p[i].price,&p[i].store);
}
//直接排序 找到最便宜的店,然后把他货全清了
int min;
struct shop temp;
for(i=0;i<n-1;i++){//从小到大
min=i;
for(j=i+1;j<n;j++){
if(p[j].price<p[min].price)
min=j;
}
temp=p[i];
p[i]=p[min];
p[min]=temp;
}
int money=0;
i=0;
while(m>0){
if(p[i].store>m){//商店存货>我需要的量
money =money+m*p[i].price;
m=m-m;
}else if(p[i].store<=m){
money =money+p[i].store*p[i].price;
m=m-p[i].store;
}
i++;
}
printf("%d",money);
}
4.0-1背包问题(动态规划)
太绝了,这种题怎么做啊,但题实在是太经典了 具体可 参考博客
已知n种物品和一个可容纳C重量的背包,物品i的重量为wi,产生的效益为pi,在装包时物品i可以装入,也可以不装,但不可以拆开装。即物品i可产生的效益为pi,这里xi为0或1。请问如何装包,能使装包总效率最大。
Input
多组测试数据。 每组第一行输入2个整数,分别为C和物品种数n 然后是n行,每行输入2个整数,分别是物品的重量wi和物品产生的效益pi
Output
对于每组数据输出1行,包含2个数分别为装包的重量及产生的效益
-可借助表思考 具体参考 博客
Sample Input
60 6
15 32
17 37
20 46
12 26
9 21
14 30
Sample Output
60 134
解决方法:
#include <stdio.h>
#include <math.h>
struct bag{
int weight;
int money;
};
int main(){
int n,c,i,j;
scanf("%d %d",&c,&n);
struct bag bg[n+1];
for(i=1;i<=n;i++){
scanf("%d %d",&bg[i].weight,&bg[i].money);
}
int dp[n+1][c+1];
for(i=0;i<=c;i++){
dp[0][i]=0;
}
for(i=0;i<=n;i++){
dp[i][0]=0;
}
for(i=1;i<=n;i++){
for(j=1;j<=c;j++){
if(bg[i].weight<=j){//考虑比较大小,放入
dp[i][j]=fmax(dp[i-1][j],dp[i-1][j-bg[i].weight]+bg[i].money);
}else{
dp[i][j]=dp[i-1][j];//直接抄上一格
}
}
}
printf("%d %d\n",c,dp[n][c]);
j=c;
for(i=n;i>0;i--){
if(dp[i][j]>dp[i-1][j]){
printf("%d ",i);
j=j-bg[i].weight;
}
if(j<=0)
break;
}
}
2017 914c程序试卷A卷
1.素数分解
验证 2000 以内的正偶数都能够分解为两个素数之和。请写出程序输出分解结果。
解决方法:
#include<stdio.h>
int isPrime(int n);
int main(){
int i,n;
//2000以内的正偶数,从4开始,步长为2
for(i=4;i<=2000;i+=2){
for(n=2;n<i;n++){//将偶数i分解为两个整数
if(isPrime(n)==0&&isPrime(i-n)==0){
printf("%d=%d+%d\n",i,n,i-n);
break;
}
}
}
return 0;
}
//判断质数
int isPrime(int n){
int i,flag=1;
if(n==1)
return 1;
for(i=2;i<=n-1;i++)
if(n%i==0){
flag=0;
break;
}
if(flag==1)
return 0;//是质数
else
return 1;//不是质数
}
2.颠倒该字符串输出
键盘输入一串字符(长度不超过 100),保留其中大小写英文字母、空格和英文句号’.’,删除其余字符并屏幕输出结果,然后颠倒该字符串输出。
输入样例:
.#tne^du(t6s! a %ma9 I
输出样例:
.tneduts a ma I
I am a student.
解决方法:
//还是直接新加一个数组不会出错
//gets用不了了,现在用fgets(str, 100, stdin);且用scanf会在空格处自动截断
#include<stdio.h>
#include <string.h>
int main()
{
char str[100],brr[100];
fgets(str, 100, stdin);
int lenstr,lenbrr,i,n=0;
char a;
lenstr=strlen(str);
for(i=0;i<lenstr;i++){
a=str[i];
if((a>='a'&&a<='z')||(a>='A'&&a<='Z')||(a==' ')||(a=='.'))
brr[n++]=a;
}
printf("%s\n", brr);
lenbrr=strlen(brr);
for(i=lenbrr-1;i>=0;i--){
printf("%c", brr[i]);
}
return 0;
}
3.构造 N×N
(经典题,太爱了)构造 N×N 阶的拉丁方阵(2<=N<=9),使方阵中的每一行和每一列中数字 1 到 N 只出现一次。
如 N=4 时:
1 2 3 4
2 3 4 1
3 4 1 2
4 1 2 3
解决方法:
//就先存储数据,保证来源
//根据第几行从数组第几个开始
//过头的就用%取余
#include<stdio.h>
#include <string.h>
int main(){
int n,i,j,num=0;
scanf("%d",&n);
int arr[n];
for(i=0;i<n;i++){
arr[i]=i+1;
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d ",arr[(j+num)%(n)]);
}
num++;
printf("\n");
}
return 0;
}
2018 914c程序试卷B卷
1.逆序数(经典)
【问题描述】给定一个整数(正整数、负整数、零),请输出它的逆序数。
【样例输入】
-12300
【样例输出】
-321
解决方法:
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
if(n<0){
printf("%c",'-');
n=-n;
}else if(n==0){
printf("%d",0);
return 0;
}
while(n>0){
if(n%10==0){
n=n/10;
printf("%d",0);
}else {
printf("%d",n%10);
n=n/10;
}
}
return 0;
}
2.统计单词个数
【问题描述】统计一个英文句子(长度不大于80)中含有英文单词的个数,单词之间用空格隔开。
【样例输入】
Hello World!
【样例输出】
num=2
解决方法:
#include<stdio.h>
#include<string.h>
int main(){
int num=0,lenstr,i;
char str[80];
fgets(str, 80, stdin);
lenstr=strlen(str);
for(i=0;i<lenstr;i++){
if(str[i]==' ')
num++;
}
printf("num=%d",num+1);
}
3.三位数加法
【问题描述】两组三位整数数据链表,用结构体ListNode表示,每个节点只放一位数字:
struct ListNode {
int val;
struct ListNode *next;
};
要求建立如下例的链表,并利用链表实现加法运算。
【样例输入】
2 4 3 5 6 4
5 6 7 7 8 9
(2->4->3)+(5->6->4) //说明:表示342+465
(5->6->7)+(7->8->9)
【样例输出】
(7->0->8)
(2->5->7->1)
解决方法:
好消息:我会啦
方法一:把结果在外面算好,再搞进去
#include<stdlib.h>
#include<stdio.h>
int lend(int n);
struct ListNode{
int val;
struct ListNode *next;
};
int main(){
int i;
int n[6];
struct ListNode *p,*p1,*p2,*result,*q;
q=(struct ListNode *)malloc(sizeof(struct ListNode ));
while(1){
for(i=0;i<6;i++){
scanf("%d",&n[i]);
}
//链1
p1=(struct ListNode *)malloc(sizeof(struct ListNode ));
p1->val=n[0];
p1->next=NULL;
q=p1;
for(i=1;i<3;i++){
p=(struct ListNode *)malloc(sizeof(struct ListNode ));
p->val=n[i];//当前的值
q->next=p;
p->next=NULL;
q=p;
}
//链2
p2=(struct ListNode *)malloc(sizeof(struct ListNode ));
p2->val=n[3];
p2->next=NULL;
q=p2;
for(i=4;i<6;i++){
p=(struct ListNode *)malloc(sizeof(struct ListNode ));
p->val=n[i];//当前的值
q->next=p;
p->next=NULL;
q=p;
}
// 先循环遍历,把两个链表的结果算出
int sum1=0,sum2=0;
p=p1;//p,q工具人
q=p2;
int chen=1;
for(i=0;i<3;i++){
sum1=sum1+(p->val)*chen;
sum2=sum2+(q->val)*chen;
chen=chen*10;
p=p->next;
q=q->next;
}
sum1=sum1+sum2;
int len=lend(sum1);
//result链
result=(struct ListNode *)malloc(sizeof(struct ListNode ));
result->val=sum1%10;
result->next=NULL;
q=result;
sum1=sum1/10;
while(sum1>0){
p=(struct ListNode *)malloc(sizeof(struct ListNode ));
p->val=sum1%10;//当前的值
q->next=p;
p->next=NULL;
q=p;
sum1=sum1/10;
}
p=result;
printf("(");
for(i=0;i<len;i++){
if(i==len-1){
printf("%d)",p->val);
p=p->next;
}else{
printf("%d->",p->val);
p=p->next;
}
}
}
return 0;
}
int lend(int n){
int num=0;
while(n>0){
num++;
n=n/10;
}
return num;
}
方法二:全部用链表做
#include<stdlib.h>
#include<stdio.h>
struct ListNode{
int val;
struct ListNode *next;
};
int main(){
int i;
int n[6];
struct ListNode *p,*p1,*p2,*result,*q,*temp,*r;
q=(struct ListNode *)malloc(sizeof(struct ListNode ));
while(1){
for(i=0;i<6;i++){
scanf("%d",&n[i]);
}
//链1
p1=(struct ListNode *)malloc(sizeof(struct ListNode ));
p1->val=n[0];
p1->next=NULL;
q=p1;
for(i=1;i<4;i++){
p=(struct ListNode *)malloc(sizeof(struct ListNode ));
if(i!=3){
p->val=n[i];//当前的值
}else {
p->val=0;
}
q->next=p;
p->next=NULL;
q=p;
}
//链2
p2=(struct ListNode *)malloc(sizeof(struct ListNode ));
p2->val=n[3];
p2->next=NULL;
q=p2;
for(i=4;i<7;i++){
p=(struct ListNode *)malloc(sizeof(struct ListNode ));
if(i!=6){
p->val=n[i];//当前的值
}else {
p->val=0;
}
q->next=p;
p->next=NULL;
q=p;
}
// p=p1;
// while(p){
// printf("%d",p->val);
// p=p->next;
// }
// p=p2;
// while(p){
// printf("%d",p->val);
// p=p->next;
// }
//工具p q r
r=(struct ListNode *)malloc(sizeof(struct ListNode ));
p=p1;
q=p2;
int flag=0;//进位符
//result链
result=(struct ListNode *)malloc(sizeof(struct ListNode ));
result->next=NULL;
r=result;
while(p&&q){
temp=(struct ListNode *)malloc(sizeof(struct ListNode ));
temp->val=(p->val+q->val+flag)%10;//当前的值
// printf("%d %d %d\n",p->val,q->val,temp->val);
r->next=temp;
temp->next=NULL;
r=temp;
if(p->val+q->val+flag>=10)
flag=1;
else
flag=0;
p=p->next;
q=q->next;
}
p=result->next;
printf("(");
printf("%d",p->val);
p=p->next;
while(p){
if(p->next==NULL && p->val==0){//第四个数是0
}else{
printf("->%d",p->val);
}
p=p->next;
}
printf(")");
}
}
2019 917数据结构与程序设计(A卷)
1.质数
根据数论的知识可知,任何一个合数都可以写成几个质数相乘的形式,这几个质数叫做这个合数的质因数。例如:24=2×2×2×3。现在从键盘输入一个正整数n(n<10000),请编程输出它的所有质因数。
输入样例
180
输出样例
2 2 3 3 5
解决方法:
#include <stdio.h>
int main(){
int n,i;
scanf("%d",&n);
//尽可能的/2,没有2之后在考虑3
for(i=2;i<=n;i=i){
while (i<=n){
if (n%i==0) {
printf("%d ",i);
break;
}else
i=i+1;
}
n=n/i;
}
printf("\n");
return 0;
}
2006年初试题
1.字符串
给定一个字符串数组str[10][100],一个整型数组count[10]。要求从键盘读入10个字符串,并统计每个字符串中包含的单词个数到对应的count数组中。
测试用例:
hello
dog
cat
deer
process
good
morning
hi
math
string
输出结果:
hello:5
dog:3
cat:3
deer:4
process:7
good:4
morning:7
hi:2
math:4
string:6
解决方法:
#include <stdio.h>
#include <string.h>
int main(){
char str[10][100];
int count[10];
int i=0,num;
for(i=0;i<10;i++){
scanf("%s",str[i]);
num=strlen(str[i]);
count[i]=num;
}
for(i=0;i<10;i++){
printf("%s:%d\n",str[i],count[i]);
}
return 0;
}
2012 819初试题
1.字符矩阵
!!!!看错题目了,但是舍不得删代码,新编一个题
给定一个n*4的字符矩阵,每行都有3个字符,最后一个列空间可自由使用,现要求按照列排序,小写字母再大写字母前面。例如下例:
测试用例:
//后面有一个空格哦
4
hel
abr
uIN
uWG
输出结果:(按列排序)
a b l
h e r
u I G
u W N
解决方法:
#include <stdio.h>
#include <string.h>
char * sortChar(char *s);
int main(){
int n,i,j,min,minj=0;
scanf("%d",&n);
char str[n][4];
char str1[30];
char *s;
for(i=0;i<n;i++){
scanf("%s",str[i]);
}
//对列进行排序
for(i=0;i<3;i++){
for(j=0;j<n;j++){
str1[j]=str[j][i];
}
s=sortChar(str1);
for(j=0;j<n;j++){
str[j][i]=s[j];
}
}
for(i=0;i<4;i++){
for(j=0;j<n;j++){
printf("%c ",str[i][j]);
}
printf("\n");
}
return 0;
}
char * sortChar(char *a){
int i,j,n,mix;
char tempA;
n=strlen(a);
for (i = 0; i<n; i++) {
if(a[i]>='A'&&a[i]<='Z'){
a[i]=a[i]+32;
}else if(a[i]>='a'&&a[i]<='z'){
a[i]=a[i]-32;
}
}
for (i = 0; i < n - 1; i++) {
mix = i; //p用于记录最小元素的下标
for (int j = i + 1; j < n; j++) { //找到剩下元素中最小的那一个
if (a[mix] > a[j])
mix = j;
}
tempA = a[i]; //temp是交换两数时的中间变量
a[i] = a[mix];
a[mix] = tempA;
}
for (i = 0; i<n; i++) {
if(a[i]>='A'&&a[i]<='Z'){
a[i]=a[i]+32;
}else if(a[i]>='a'&&a[i]<='z'){
a[i]=a[i]-32;
}
}
return a;
}
2.字符矩阵
给定一个n*4的字符矩阵,每行都有3个字符,最后一个列空间可自由使用,现要求按行的字符大小从小到大进行排序,当第一列的字符相同时,按第二列字符的大小比较,区分大小写,行内各列字符位置不变。例如下例:
测试用例:
//后面有一个空格哦
4
hel
abr
uIN
uWG
输出结果:
a b r
h e l
u I N
u W G
解决方法:
#include <stdio.h>
#include <string.h>
int main(){
int n,i,j,min;
scanf("%d",&n);
char str[n][4];
for(i=0;i<n;i++){
scanf("%s",str[i]);
}
char s[100];//不能写成*s.
for (i=0;i<n-1; i++) {
min = i;
for (j=i+1;j<n;j++) {
if (strcmp(str[min],str[j])>0)//前面一个大
min = j;
}
strcpy(s,str[i]); //temp是交换两数时的中间变量
strcpy(str[i],str[min]);
strcpy(str[min],s);
}
for(i=0;i<n;i++){
printf("%s\n",str[i]);
}
return 0;
}
2013 914初试题
1.菀菀 类 安大题
能有几分似菀菀也是你的福气
已知 y=1-1/3+1/5-1/7+1/9+...,以此类推直到最后一项小于0.0000001为止,请编写完整的程序求出y,要求有完整的输入、计算、输出过程。
解决方法:
#include <stdio.h>
int main(){
double y=0,num=1;
int i=0;
while(num>0.0000001){
num=(1.0)/(2*i+1);
if(i%2==0){//为偶数项
y=y+num;
}else{
y=y-num;
}
i++;
}
printf("%lf",y);
return 0;
}
2014 914初试题
1.n的阶乘
编写一个函数Fac (int n), 计算n的阶乘,其中10≥n≥0。
输入示例:
4
输出示例:
24
解决方法:
#include <stdio.h>
int Fac(int n);
int main(){
int n;
scanf("%d",&n);
printf("%d",Fac(n));
return 0;
}
int Fac(int n){
if(n==0||n==1){
return 1;
}else
return n*Fac(n-1);
}
2.有strlen函数,我偏不用
不用strlen函数,编写一个函数slength(char *s),用于求字符串s的长度。
输入示例:
hello
输出示例:
5
解决方法:
#include <stdio.h>
#include <stdlib.h>
int slength(char *s);
int main(){
int len;
char str[20];
scanf("%s",str);//读取数据
len=slength(str);//求字符串长度
printf("%d",len);
return 0;
}
//求字符串长度
int slength(char *s){
int sum=0;
while(*s!='\0'){
sum++;
s++;
}
return sum;
}
3.对单词排序输出
编写一个程序,从键盘上读入10个单词,对这10个单词排序并输出。
说明:排序必须单独用函数实现,在main函数中调用排序函数。
在C语言中,我们可以用“==”来比较两个数或两个字符是否相等。那字符串该如何比较呢,我们一般用strcmp函数来比较,它的头文件为<string.h>。结果>0就是前面的值大,结果<0就是后面的值大。
strcmp(ar2[min],ar2[j])>0
strcpy(s, ar2[i])
输入示例:
a112
b1
c145
d1
f1
e113
e113
t555
re3
fds
输出示例:
a112 b1 c145 d1 e113 e113 f1 fds re3 t555
解决方法:
#include <stdio.h>
#include <string.h>
void sortChar(char ar2[][100]);
int main(void){
char arr[10][100]={0};
int i;
//输入
for(i=0;i<10;i++){
scanf("%s",arr[i]);
}
//排序
sortChar(arr);
//打印
for(i=0;i<10;i++)
printf("%s ",arr[i]);
return 0;
}
void sortChar(char ar2[][100]){//其中函数完成对ar2数组中的n个字符串进行排序。
int i,j,min;
char s[100];
for (i=0; i<9; i++) {
min=i;
for (int j = i + 1; j<10; j++) { //找到剩下元素中最小的那一个
if (strcmp(ar2[min],ar2[j])>0)
min = j;
}
strcpy(s, ar2[i]); //temp是交换两数时的中间变量
strcpy(ar2[i],ar2[min]);
strcpy(ar2[min],s);
}
}
2015 914C初试题
1.田忌赛马
田忌经常与齐国众公子赛马,设重金赌注。孙膑对田忌说:“您只管下大赌注,我能让您取胜。”田忌相信并答应了他,与齐王和诸公子用千金来赌注。比赛即将开始,孙膑说:“现在用您的下等马对付他们的上等马,拿您的上等马对付他们的中等马,拿您的中等马对付他们的下等马。”田忌一场败而两场胜,最终赢得齐王的千金赌注。我们分别用 A, B, C 表示田忌的上等马,中等马,下等马,用 0, 1, 2 表示对手的上等马,中等马,下等马。请根据对手的出场顺序确定田忌方的出场顺序。注意:仅需要输入两个整数就够了,它们代表前两匹马,第三匹马自然被确定了。
(妈妈夸我小天才) 0->C 1->A 2->B 怎么确定最后一个数呢?三个数想加结果为3,还是三个不一样的数,还确定了两个。
3-a-b=第三个数
Sample Input:
1 0
Sample Output
A C B
解决方法:
#include <stdio.h>
char print1(int a);
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%c %c %c",print1(a),print1(b),print1(3-a-b));
return 0;
}
char print1(int a){
switch (a) {
case 0:
return 'C';
case 1:
return 'A';
case 2:
return 'B';
}
return ' ';
}
2.复数计算
复数可表示成 a+bi,其中 a,b 都是实数, ii = -1。现有 N 个复数,请计算它们的乘积。输入复数的个数 N 及每个复数,输出它们的乘积。保留两位小数。提示:(a+bi)(c+di)=(ac-bd)+(bc+ad)i
Sample Input
2
0.5 1
1 -0.5
Sample Output
1.00 0.75
解决方法:
#include <stdio.h>
void fushu(double *a,double *b,int i);
int main(){
int n,i;
scanf("%d",&n);
double a[n],b[n];
for(i=0;i<n;i++){
scanf("%lf",&a[i]);
scanf("%lf",&b[i]);
}
for(i=0;i<n-1;i++){//将两组处理完结果存到第二组,再第二组与第三组
fushu(a,b,i);
}
printf("%.2f %.2f",a[i],b[i]);
return 0;
}
void fushu(double *a,double *b,int i){
double a1,b1;
a1= a[i]*a[i+1]-b[i]*b[i+1];
b1= a[i+1]*b[i]+a[i]*b[i+1];
a[i+1]=a1;
b[i+1]=b1;
}
3.求平均幸福指数
在某小区,举行幸福指数投票。假设有 N(3<=N<=50)个人参与了投票,去掉一个最高分和一个最低分,剩余的分数取平均值可作为该小区的平均幸福指数。输入投票人数及投票分数,输出平均幸福指数。结果保留两位小数。
Sample Input
4
8.0
7.1
7.5
6.9
Sample Output
7.30
解决方法:
#include <stdio.h>
int main(void){
int n,i;
scanf("%d",&n);
int maxi=0,mini=0;
double love[n];
double sum=0;
for(i=0;i<n;i++){
scanf("%lf",&love[i]);
if(love[mini]>love[i])
mini=i;
else if(love[maxi]<love[i])
maxi=i;
sum=sum+love[i];
}
sum=sum-love[maxi]-love[mini];
printf("%.2f",sum/(n-2));
return 0;
}
2016 914C初试题
1、这门课程的总评成绩
【问题描述】
你这学期计算机应用基础课程的总评成绩=10%平时+40%上机实验+50%期末卷面考试;成绩由优、良、中、及格、不及格五个等级来表示,其中:
总评成绩>=90,优
90>总评成绩>=80,良
80>总评成绩>=70,中
70>总评成绩>=60,及格
其他,不及格
【输入】
输入一个学生的平时成绩、上机实验成绩、期末卷面成绩(整型);
【输出】
请你输出该学生的成绩等级。
【样例输入】
80 90 85
【样例输出】
良
解决方法:
#include <stdio.h>
char *grade(int a);
int main(){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
double gra;
gra=0.1*a+0.4*b+0.5*c;
printf("%s",grade(gra));
return 0;
}
char *grade(int a){
switch (a/10) {
case 9:
return "优";
case 8:
return "良";
case 7:
return "中";
case 6:
return "及格";
case 5:
case 4:
case 3:
case 2:
case 1:
return "不及格";
}
return " ";
}
2、根据年龄计算生肖。
【问题描述】
在东南亚的很多国家,都有十二生肖的说法。以中国为例,2000 年为龙年(Dragon),接下来依次是蛇(Snake),马(Horse),羊(Sheep),猴(Monkey),鸡(Cock),狗(Dog),猪(Boar),鼠(Rat),牛(Ox),虎(Tiger),兔(Hare)。今年是 2015 年,请根据用户输入的年龄,输出他(她)的生肖。
【输入】
第一行的数字为测试数据的组数 N,接下来是 N 个人的年龄。
【输出】
相应的生肖。
【样例输入】
2
14
109
【样例输出】
Snake
Horse
解决方法:
可能复杂了,根据年龄算出出生年份,然后根据年份算生效,生肖这个我真不会😅😅😅
#include <stdio.h>
char *bir(int year);
int biryear(int a);
char *print1(int year);
int main(){
int n,a,i,year;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a);
year =biryear(a);
printf("%s",print1(year));
}
return 0;
}
//计算出生年份
int biryear(int a){
if(a>=15)
a=2015-a;
else
a=2000-(a-15);
return a;
}
//输出生肖
char *bir(int year){
switch (year) {
case 0:
return "Rat";
case 1:
return "Ox";
case 2:
return "Tiger";
case 3:
return "Hare";
case 4:
return "Dragon";
case 5:
return "Snake";
case 6:
return "Horse";
case 7:
return "Sheep";
case 8:
return "Monkey";
case 9:
return "Cock";
case 10:
return "Dog";
case 11:
return "Boar";
}
return " ";
}
//根据年份判别生效
char *print1(int year){
if(year == 1900){
return "rat";
}
if(year > 1900){
year = year - 1900;
year = year % 12;
return bir(year);
}
if(year < 1900){
year = (year - 1900) * -1;
year = year % 12;
year = 12 - year;
return bir(year);
}
return " ";
}
3、各位数字和。
【问题描述】
小明今年 4 岁了,正读幼儿园小班呢。老师为了测试孩子对加法的掌握程度,在黑板上随手写了一些数字,让孩子们把各个位上的数字加一起,看看答案正确与否。
【输入】
第一行的数字为测试数据的组数 N,接下来每行有两个数字,前面的数字代表老师写下的整数,后面的数字代表孩子运算的结果。
【输出】
如果正确输入 Right, 如果错误输出 Wrong。
【样例输入】
2
123 6
7890 20
【样例输出】
Right
Wrong
解决方法:
#include <stdio.h>
int func(int a);
int main(){
int n,i;
scanf("%d",&n);
int a,b;
for(i=0;i<n;i++){
scanf("%d%d",&a,&b);
if(func(a)==b)
printf("%s","Right");
else
printf("%s","Wrong");
}
return 0;
}
int func(int a){
int sum=0;
while(a>0){
sum=sum+a%10;
a=a/10;
}
return sum;
}