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; }
本文作者:ZarkY
本文链接:https://www.cnblogs.com/ZarkY/p/17166259.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步