上机考试常有算法(不含计算问题)
计算机二级c上机解题技巧(简便方法,不用编程)

一、填空题(一)链表类型题目包括:15、42、43、50、56、75、79、85、86、87技巧解析:1、首先看清楚题目要求和意思。
看清楚链表有没有带头结点,如果带有头结点,指向数据源的指针内容是p=h—>next;如果是不带有头结点,则填写的是p=h;2、如果所要填写的空在循环语句while的括号中的时候,里面的内容填写的是p或者是q,以最近出现的为主;如果是在循环语句的里面的时候,填写的是q=p —>next;3、如果是排序的时候,从小到大的时候是大于号,从大到小的时候是小于号。
4、如果链表题目中考到调用函数,一般只需要填入实参head,例如:fun(head);在构造链表的时候都会有头结点,一般用head来表示,head指向了链表中的第一个数据的地址。
细化分类:1.将数据域中的数据进行排序,类似题目:15、42void fun(NODE *h){ NODE *p, *q; int t;/**********found**********/p = __1__ ;指向数据源,由于h是带头结点的链表,因此需要填入h->next while (p) {判断链表p是否已经到末尾/**********found**********/q = __2__ ; 比较两个数的大小,因此需要q指向p中的下一个数据需要填入p->next,也就是说p指向了第一个数据,q指向了第二个数据。
while (q) {判断q是否指向了末尾/**********found**********/if (p->data __3__ q->data)从小到大排序,因此填入大于符号{ t = p->data; p->data = q->data; q->data = t; }交换数据 q = q->next; q自增,目的是比较出最小的数据}p = p->next; p自增}}联想记忆分析1:对一维数组进行从小到大排序void fun(int b[N]){ int i, j, a;for(i=0;i<N-1;i++)for(j=i;j<N;j++){if(b[i]>b[j]){a=b[i];b[i]=b[j];b[j]=a;}}}联想记忆分析2:对结构体数组按照姓名进行从小到大排序for(i=0;i<N-1;i++)for(j=i;j<N;j++){if(strcmp(a[i].name,a[j].name)>0){a=b[i];b[i]=b[j];b[j]=a;}2.将数据域中的元素逆置,类似的题目:43、50链表中数据域中的元素逆置,首先将第一个数据取出来放在最后一个位置,也就是将其next置空,表示已经到了末尾。
计算机等级考试需掌握的重要数据结构和算法

计算机等级考试需掌握的重要数据结构和算法计算机等级考试(Computer Rank Examination)是由国家教育部门主管的一项考试,旨在评估考生在计算机科学和技术方面的知识水平和能力。
作为计算机专业学生和从业者,掌握重要的数据结构和算法是取得较好成绩的关键。
本文将介绍计算机等级考试中需要掌握的重要数据结构和算法,并提供相应的示例和讲解。
一、线性数据结构1. 数组(Array)数组是一种线性数据结构,其中的元素在内存中是连续存储的。
在计算机等级考试中,我们需要了解数组的定义、特点以及基本操作,如创建数组、访问元素、插入元素和删除元素等。
例如,以下是一个整型数组的定义和初始化:int[] arr = new int[5];arr[0] = 1;arr[1] = 2;arr[2] = 3;arr[3] = 4;arr[4] = 5;2. 链表(Linked List)链表是一种非连续的线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
在计算机等级考试中,我们需要了解链表的不同类型(如单链表、双向链表和循环链表),以及基本操作,如插入节点、删除节点和遍历链表等。
以下是一个单链表的示例:class Node {int data;Node next;}Node head = new Node();head.data = 1;Node node2 = new Node();node2.data = 2;head.next = node2;Node node3 = new Node();node3.data = 3;node2.next = node3;二、非线性数据结构1. 栈(Stack)栈是一种具有后进先出(LIFO)特性的数据结构,其中只能在允许的一端进行插入和删除操作。
在计算机等级考试中,我们需要了解栈的基本操作,如入栈、出栈和判断栈是否为空等。
以下是一个栈的示例:class Stack {private int[] arr;private int top;public Stack(int capacity) {arr = new int[capacity];top = -1;}public void push(int element) {arr[++top] = element;}public int pop() {return arr[top--];}public boolean isEmpty() {return top == -1;}}2. 队列(Queue)队列是一种具有先进先出(FIFO)特性的数据结构,其中在一端插入元素,在另一端删除元素。
计算机算法面试题及答案

计算机算法面试题及答案一、算法基础知识算法是计算机科学的核心内容之一,它是解决实际问题的有效工具。
在计算机算法面试中,考官通常会涉及算法的基础知识,因此我们需要对一些常见的算法和数据结构有所了解。
1. 算法的定义及特性算法是解决问题的一系列有序步骤的描述。
算法应该具备的特性包括:输入、输出、确定性、有限性、可行性。
2. 时间复杂度与空间复杂度在面试中,评估算法性能的指标通常是时间复杂度和空间复杂度。
时间复杂度是指算法运行所需时间与问题规模的关系,通常用大O记法表示。
空间复杂度是指算法所需的额外空间与问题规模的关系。
3. 常见数据结构在面试中,我们需要对一些常见的数据结构有所了解,比如数组、链表、栈、队列、树、图等。
我们需要了解它们的特点、操作方法以及常见的应用场景。
4. 常见算法在面试中,会考察一些常见的算法,比如排序算法(冒泡排序、插入排序、选择排序、快速排序、归并排序等),查找算法(线性查找、二分查找等),图算法(深度优先搜索、广度优先搜索等),动态规划算法等。
二、面试题及答案下面我将列举一些常见的算法面试题,并给出对应的答案及解析。
1. 请实现一个二分查找算法。
答案:```pythondef binary_search(nums, target):left = 0right = len(nums) - 1while left <= right:mid = (left + right) // 2if nums[mid] == target:return midelif nums[mid] > target:right = mid - 1else:left = mid + 1return -1```解析:二分查找算法是一种高效的查找算法,它的时间复杂度为O(logn)。
在有序数组中查找目标元素,我们通过不断缩小查找范围,直到找到目标元素或范围为空。
2. 请实现一个快速排序算法。
答案:```pythondef quick_sort(nums):if len(nums) <= 1:return numspivot = nums[0]left = [x for x in nums[1:] if x <= pivot]right = [x for x in nums[1:] if x > pivot]return quick_sort(left) + [pivot] + quick_sort(right)```解析:快速排序算法是一种高效的排序算法,它的时间复杂度为O(nlogn)。
计算机二级/20个常考经典算法实例/好老师

计算机二级20个常考经典算法实例一、常用算法有8个方面:1、递推算法(级数、数列求和、二分法、梯形法、穷举法等)2、排序算法(选择法排序、冒泡法)3、查找算法(顺序查找、折半查找、统计、求和、计数)4、有序数列的插入、删除操作5、求解算法(最大数、最小数、素数、最大公约数、最小公倍数)6、矩阵的处理(生成矩阵、交换和基本运算)7、递归算法(求阶乘、最大公约数)8、字符串处理(插入、删除、连接和比较)二、常用算法的应用举例:(有21个程序)1、计算S=1+2+…+100的值。
(求和、统计)2、找出100~999之间的所有“水仙花数”(穷举法、统计)3、从键盘输入10个数,然后找出其中的最大值和最小值。
(找最大数、最小数)4、任意输入n个数,按由小到大的顺序排列并显示输出。
(排序算法--选择法排序)5、(对字符串排序处理)有5个英文单词,分别为:Word,Excel,Powerpoint,Type,Angle,要求设计出如下程序:(1)在键盘上输入数N(本例输入5),把英文单词放入名为X大小为N 的数组中(2)显示出X数组中的英文单词(3)对数组中的英文单词从小到大排序(4)显示出排序后X数组中英文单词6、求5的阶乘值(5!=?)7、计算t=1!+2!+……+10!(即求阶乘之和)。
计算t=1!+2!+……+10!即求阶乘之和(双循环)。
8、多项式S=1+2+22+23+……+232,请设计一个程序,求S的值。
9、除了1和它本身之外不能被任何一个整数所整除的自然数叫质数,除去2之外,其它质数都是奇数,又称为素数。
请设计一个程序,在屏幕上输出3——150之间的所有素数。
10、设计1个程序,要求是:(查找算法、统计、求和、找素数或质数)(1)在键盘上输入1个不小于3的自然数N(例输入10),求出其不到第N个自然数中奇数之和,并输出结果(2)输出1到第N自然数中所有质数的个数11、穷举法,整钱找零.prg程序如下:*(1)穷举法整钱找零.prg"、*整钱找零:100=x1*10+x2*5+x3*1*x1,x2,x3>=1,x1+x2+x3=20for x1=1to10for x2=1to20x3=20-x1-x2if100=x1*10+x2*5+x3*1and x3>0then?x1,x2,x3endifnext x2next x112、求级数.prg程序如下:*求级数1.prg"*s=1+1/2-1/3+1/4+....s=1d=1clearinput"输入N:"to nfor i=2to n。
上机考必备算法

上机考必备算法1、计算n!方法一:递推法for(result=1,i=1;i<=n;i++)result=result*i;方法二:递归法s=fact(n);double fact(int n){double result;if(n==1||n==0) result=1;else result=n*fact(n-1);return result;}此外,例如计算x的n次方,等差数列的前n项和等都可以用此方法;2、数列求和问题例:求s=x+x^2/(2!)+x^3/(3!)+....(n项)(x^n表示x的n次方)方法一:调用函数for(s=0,i=1;i<=n;i++){item=mypow(x,i)/fact(i);s=s+item;}double fact(int n) /*求阶乘*/{int i;double t;t=1;for(i=1;i<=n;i++)t=t*i;return t;}double mypow(double x,int n) /*求x的n次幂*/ {int i;double t=1;for(i=1;i<=n;i++)t=t*x;return t;}方法二:嵌套循环for(s=0,i=1;i<=n;i++){for(item=1,de=1,nu,j=1;j<=i;j++){de*=j; /*计算分母*/nu*=x; /*计算分子*/item=nu*1.0/de;}s+=item;}其他求和问题亦类似,若有符号项,则只需添加一个变量flag;3、判断一个数是否为素数for(i=2;i<=m/2;i++)if(m%i==0) break;if(i>m/2) printf("Yes!\n");else printf("No!\n");其中,m/2也可换成sqrt(m)以提高程序运行效率;5、统计一个整数的位数n=0;if(in<0) in=-in;if(in==0) n=1; /*不可少,或者用do-while语句代替(至少执行一次)*/while(in!=0){n++;in/=10;}6、按顺序输出一个整数方法一:#include<stdio.h>main(){long temp,n,t;scanf("%ld",&n);temp=n;t=1;while(n>=10){n=n/10;t=t*10;n=temp;while(t!=0){printf("%d,",n/t);n=n%t;t=t/10;}}方法二:#include<stdio.h>main(){long i ,x ,t; /*可以不用t,直接用x*/ scanf("%ld",&x);t=x;for ( i=1; t/i>=10 ; i=i*10) ;while(i>0) {printf("%d,",t/i);t=t%i;i=i/10;}方法三:数组法int a[80];int i=0,j;do{a[i]=n%10;n/=10;i++;}while(n!=0);for(j=i-1;j>=0;j++) printf("%d,",a[j]);7、逆序输出一个整数方法一:do{printf("%d",n%10);n/=10;}while(n!=0);方法二:递归法#include <stdio.h>void reverse(int n); void main(){int n;scanf("%d",&n);printf("After reversed:"); reverse(n);printf("\n");}void reverse(int n){if(n!=0){printf("%d ",n%10); reverse(n/=10);}}方法三:数组法int a[80];int i=0,j;do{a[i]=n%10;n/=10;i++;}while(n!=0);for(j=0;j<i;j++) printf("%d,",a[j]);8、古典算数问题(嵌套循环)例:100元拆成1元、5元、10元有几种方法?for(i=0;i<=10;i++)for(j=0;j<=20;j++)for(k=0;k<=100;k++)if(i*10+j*5+k==100) printf("%d %d %d\n",i,j,k); 搬砖头问题也是类似的(书第四章例4-11)9、输出Fibonacci数列方法一:常规递推法int x1=1,x2=1;printf("%d %d ",x1,x2);for(i=3;i<=n;i++){x1=x1+x2;printf("%d ",x1);x2=x2+x1;printf("%d ",x2);}方法二:调用函数返回第n项Fibonacci数for(i=1;i<=n;i++)printf("%d",fib(i));long fib(int n){long a,b,c;int i;if(n==1||n==2)return 1;a=b=1;for (i=3;i<=n;i++){c=a+b;a=b;b=c;}return c;}方法三:递归法求第n项Fibonacci数#include <stdio.h>long f(int n){if(n<=1) return n;else return f(n-2)+f(n-1);}main(){int n;scanf("%d",&n);printf("%ld \n",f(n));}方法四:数组法int i;int fib[20]={1,1}for(i=2;i<20;i++)fib[i]=fib[i-1]+fib[i-2];10、排序问题方法一:冒泡法#include <stdio.h>void main(){int a[10];int n,i,j,t;scanf("%d",&n);for (i=0;i<n;i++){scanf("%d",&a[i]);}for (i=1;i<n;i++){t=a[i];for (j=i;j>0&&a[j-1]>t;j--){a[j]=a[j-1];}a[j]=t;}for (i=0;i<n;i++){printf("%d ",a[i]);printf("\n");}方法二:选择法#include<stdio.h>int sort(int *a,int n){int i,j,k,t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(a[k]>a[j])k=j;if(k!=i){t=a[k];a[k]=a[i];a[i]=t; }}}void main(){int n,i,a[10];scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);sort(a,n);for(i=0;i<n;i++)printf("%d ",a[i]);printf("\n");}11、进制转换问题(字符数组)#include <stdio.h>void main( ){ int i, n; char s[10];printf("input a string: "); /* 输入字符串*/i = 0;while((s[i] = getchar( )) != '\n')i++;s[i] = '\0';n = 0; /* 将字符串转换为整数*/for(i = 0; s[i] != '\0'; i++)if(s[i] <= '9' && s[i] >= '0')n = n * 10 + (s[i] - '0');elsebreak;printf("digit = %d\n", n);}哥德巴赫猜想方法一:调用函数判断素数#include <stdio.h>int prime(int x);void main(){int i,m,n,count;count=0;for(i=6;i<=100;i=i+2)for(m=3;m<=i-3;m++){n=i-m;if(prime(m) && prime(n) && m<=n){printf("%d=%d+%d ",i,m,n);count++;if(count%5==0)printf("\n");break;}}printf("\n");}int prime(int x){int i,a;a=1;for(i=2;i<=x/2;i++)if(x%i==0){a=0;break;}return a;}方法二:不用函数#include<stdio.h>#include<math.h>int prime(int);main(){int n,a,b,i,j,count=0;for(n=6;n<=100;n=n+2)for(a=3;a<=n/2;a=a+2){for(i=2;i<=sqrt(a);i++)if(a%i==0)break;if(i>sqrt(a)){b=n-a;for(j=2;j<=sqrt(b);j++)if(b%j==0)break;if(j>sqrt(b)){count++;printf("%5d=%2d+%2d",n,a,b);if(count%5==0)printf("\n");break;}}}printf("\n");}分解质因数,如90=2*3*3*5调用函数判断素数#include<math.h>#include<stdio.h>int prime(int n);void main(){int n,i,t;printf("n=");scanf("%d",&n);if(prime(n))printf("cannot decompound\n"); else{printf("%d=",n);t=2;while(t<=n/2){if(n%t==0){printf("%d*",t);n=n/t;}else t++;}}printf("%d\n",n); }int prime(int n) {int i,m;if(n<2)return 0;m=sqrt(n);for(i=2;i<=m;i++) if(n%i==0)break; if(i>m)return 1; else return 0;}。
常见算法面试题

常见算法面试题一、数组与字符串在算法面试中,对数组和字符串的操作是基础且常见的题目。
面试官通常会通过这类问题来考察应聘者对数据结构的理解和编程能力。
1.1 数组的旋转给定一个数组,如何将其向右旋转k个位置?例如,数组[1, 2, 3, 4, 5, 6, 7]向右旋转3个位置后,应变为[5, 6, 7, 1, 2, 3, 4]。
解决这个问题的一种方法是使用额外的数组来完成旋转,但更高效的方法是就地操作。
可以通过三次翻转数组的两部分来实现,首先翻转整个数组,然后翻转前k个元素,最后翻转剩下的元素。
1.2 字符串的压缩字符串压缩是另一个常见的问题,例如如何实现一个方法来压缩字符串,使得其中的连续字符都被替换为字符和其出现次数的组合。
例如,“aaabbcccc”可以被压缩为“a3b2c4”。
这个问题可以通过遍历字符串并记录当前字符和其出现次数来解决。
每当遇到新的字符时,就将当前字符和次数记录到结果字符串中,并重置计数器。
二、链表操作链表是数据结构中的另一个重要概念,面试中经常会涉及到链表的操作问题。
2.1 反转链表给定一个单链表,如何将其反转?这个问题的解决方案是遍历链表,同时改变每个节点的next指针,使其指向前一个节点。
2.2 检测环如何检测一个链表中是否存在环?可以使用Floyd的循环查找算法,也称为“龟兔赛跑”算法。
通过两个指针,一个每次移动一步(慢指针),另一个每次移动两步(快指针),如果链表中存在环,那么快指针最终会追上慢指针。
三、树结构树和其变体(如二叉搜索树、堆等)在算法面试中也经常出现。
3.1 二叉树的遍历二叉树的遍历有前序、中序、后序和层序等不同方式。
面试官可能会要求编写代码来实现这些遍历方式。
3.2 堆操作堆是一种特殊的完全二叉树,满足特定的堆性质(例如,最大堆中父节点的值总是大于或等于子节点的值)。
常见的堆操作包括插入元素、删除元素和提取最大(或最小)元素。
四、图算法图算法在解决一些复杂问题时非常有用,尤其是在处理网络和路径相关的问题时。
计算机算法面试题及答案

计算机算法面试题及答案1. 问题:请解释什么是时间复杂度,并给出一个例子。
答案:时间复杂度是衡量算法运行时间与输入规模之间关系的量度。
它通常用大O符号表示,例如O(n)、O(n^2)等。
一个例子是冒泡排序算法,其时间复杂度为O(n^2),因为当数组长度为n时,它需要进行n*(n-1)/2次比较。
2. 问题:描述快速排序算法的过程。
答案:快速排序是一种分治算法,它通过选择一个“基准”元素,将数组分为两部分,一部分包含小于基准的元素,另一部分包含大于基准的元素。
然后递归地对这两部分进行快速排序,直到每个子数组只有一个元素或者为空。
3. 问题:什么是动态规划?请给出一个应用实例。
答案:动态规划是一种通过将复杂问题分解为更小的子问题来解决的方法,并且通过记忆已解决的子问题的结果来避免重复计算。
一个典型的应用实例是斐波那契数列的计算,通过动态规划可以避免大量的重复计算,从而提高效率。
4. 问题:解释图的深度优先搜索(DFS)算法。
答案:深度优先搜索是一种用于遍历或搜索树或图的算法。
它从一个节点开始,尽可能深地搜索树的分支,直到达到一个叶节点,然后回溯到上一个节点,继续搜索下一个分支,直到所有节点都被访问过。
5. 问题:请描述堆排序算法的工作原理。
答案:堆排序是一种基于比较的排序算法,它利用了二叉堆的数据结构。
算法的核心是构建一个最大堆,然后不断移除堆顶元素(最大值),将其放置在数组的末尾,同时调整剩余元素以保持最大堆的性质,直到数组完全排序。
6. 问题:什么是哈希表?它有什么优点?答案:哈希表是一种通过哈希函数将键映射到表中一个位置来访问记录的数据结构。
它的优点包括高效的查找、插入和删除操作,平均时间复杂度为O(1),这使得哈希表在需要快速访问数据的场景中非常有用。
7. 问题:解释什么是递归算法,并给出一个递归函数的例子。
答案:递归算法是一种自我引用的算法,它通过重复调用自身来解决问题。
一个典型的递归函数例子是计算阶乘的函数,它定义为n! = n * (n-1)!,其中n!是n的阶乘。
华为上机题整理大全及答案解析

1、数组中最大数与最小数之和 (4)2、两个长整型的和 (5)3、删除串中重复出现的字符 (6)4、将串中重复出现的字符进行压缩 (8)5、操作数1 运算符操作数2 (9)6、约瑟夫环问题 (11)7、去掉数字串中的最大数和最小数 (13)8、身高差值最小的两个身高 (14)9、删除子串 (15)10. 实现高精度的十进制加法 (17)11、10个学生及格线 (23)12、亮着的电灯数 (24)14、字符串按照特殊规则转换 (25)15、字符串中查找单词 (27)16、数组中不同的一个数 (28)17、数组中不同的两个数 (29)18、链表以k翻转 (31)19、链表相邻元素翻转 (34)20、字符串中小括号中括号匹配 (36)21、一行数字中找子数 (38)22、字符串M化成以N为单位的段 (40)23将电话号码 one two 。
nine zero (41)24.将整数倒序输出 (44)25、括号匹配 (46)26约瑟夫问题 (47)27.统计数字出现的次数,最大次数的统计出来 (48)28. .字符串首字母转换成大写 (50)29. 子串分离 (50)29. 子串分离题目描述:通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。
请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子串存储。
如果输入“abc def gh i d”,结果将是abc,def,gh,i,d,要求实现函数:void DivideString(const char *pInputStr, long lInputLen, char *pOutputStr); 【输入】 pInputStr:输入字符串lInputLen:输入字符串长度【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;方法一:void DivideString(char*pInputStr,long iInputLen,char*pOutputStr){int cnt;while(*pInputStr!='\0')//用空来判断串结束,并没有用到串长{if(*pInputStr!=' '){cnt=0;*pOutputStr++=*pInputStr++;}else{cnt++;if(cnt==1)//用cnt来实现两个单词之间有多个空格时也只替换一个空格为, *pOutputStr++=',';pInputStr++;}}*pOutputStr++=',';*pOutputStr='\0';}方法二:void DivideString(char*pInputStr,long iInputLen,char*pOutputStr){int i,cnt=0,k=0;For(i=0;pInputStr[i]!=’’;i++);//不要忘了把串首的空格给剔除for(i<iInputLen;i++)//利用长度这个参数,i指示输入指针{if(pInputStr[i]!=' '){cnt=0;pOutputStr[k++]=pInputStr[i];//k指示输出指针,与i的增加并非同步}else{cnt++;if(cnt==1)pOutputStr[k++]=',';}}pOutputStr[k++]=',';pOutputStr[k]='\0';}void main(){char *a="I am a good boy";char*b=(char*)malloc(strlen(a)+1);//应该加2吧,末尾要存放一个,一个串结束标识符DivideString(a,strlen(a),b);printf("%s\n",b);}27.统计数字出现的次数,最大次数的统计出来输入:323324423343输出:3,6#include <stdio.h>#include <string.h>int main(){char *pInputStr="2343545466666789";int hash[10]={0};int max,max_n,i;//统计次数for(i=0;i<strlen(pInputStr);i++)hash[pInputStr[i]-'0']++;//串转化为数字//寻找最大的次数max=hash[0];for(i=0;i<10;i++){if(hash[i]!=0)//有些数字的出现次数可能为0,使用此句可以避免下面的比较{if(hash[i]>max)//等价语句:max=max>hash[i]?max,hah[i];{max=hash[i];max_n=i;}printf("the number %d 出现%d次\n",i,hash[i]);}}printf("数字%d出现次数最多:%d\n",max_n,max);return 0;}28. .字符串首字母转换成大写举例:输入:this is a book返回:This Is A Book#include <stdio.h>int main(){char a[]="i am is a boy";int i;//int n=strlen(a);char b[256]={0};for(i=0;i<strlen(a);i++){if(a[i]==' ')a[i+1]=a[i+1]-32;b[i]=a[i];}b[0]=a[0]-32;printf("原串为:%s\n",a);printf("新串为:%s\n",b);return 0;}1、数组中最大数与最小数之和1.第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50#include<stdio.h>main(){int num[50]={0};int i,n;printf("请输入整型数组的长度(1~50):");scanf("%d",&n);printf("请输入整型数组的元素:");for (i=0;i<n;i++){scanf("%d",&num[i]);}int min_num=num[0];int max_num=num[0];for(int j=0;j<n;j++){if(max_num<num[j])max_num=num[j];else if(min_num>num[j])min_num=num[j];}int sum=min_num+max_num;printf("数组中最大与最小值之和:%d\n",sum);return 0;}2、两个长整型的和2.求两个长长整型的数据的和并输出,例如输入1233333333333333 。
浙江省高等学校计算机等级考试(C语言)常考算法

六、字符串处理
• 判断字符为数字、大小写字母的表达式
ch>=‘0’ &&ch<=‘9’; ch>=‘A’ &&ch<=‘Z’; ch>=‘a’ &&ch<=‘a’; ch>=‘A’ &&ch<=‘Z’ ||ch>=‘a’ &&ch<=‘a’; 字符串最后元素为’\0’
• 编写一个函数,将两个字符串连接起来。 (不能用strcat函数)。 • 编写一个函数int comp(char *s1,char *s2), 比较字符串S1和S2的大小,若S1大于S2 则返回1,若S1等于S2则返回0,若S1 小于S2则返回-1。(不能用st0); n=n/10;(n/=10;)}
• 组数 • While(){
S=s*10+n;}
• 例:将字符串中的非常数字字符去掉,使 剩下的数字字符组成一个整形数值输出。
三、一维数组的遍历
求最大值、最小值、平均值、偶/奇数个数, 素数个数、不及格人数等
四、一维数组的排序
• 例:键盘输入10个数,要求从小到大排序 后输出。 • 例:从键盘输入10个数 [1,100],统计相同值 的个数。
输入:1 输出:1 2 3 4 5 2 4 5 4 3 2 1 28 2 3 1 1 1 8 1
五、二维数组
• 任意输入x[10][10]个数,找出并输出其中的 最大数和最小数,以及它们的下标。 • 任意输入a[N][N]个数,求出行下标加列下 标之和为奇数的这些元素之和。
• 例:从键盘10个数,求出最大值和最小值 所在的下标。并输出所有元素为奇数的和。 • 设数组A[n]中是一组有序数,编程完成从键 盘任意输入一个数x,若数组A[n]中存在x则 将它们删除,并将数组长度压缩(即后面 元素向前移动,元素顺序不能改变。不能 引人新数组);若数组A[n]中不存在x则显 示“not found!”。
常见Java上机面考试

常见的Java上机面试题在程序员面试中,主要的考试形式分为笔试和上机编程考试两部分。
笔试主要考查面试者的基础是否牢固;上机考试主要考查面试者的实际开发能力和技术技巧。
上机编程考试,要求面试者能够根据题目的要求,使用一种编程工具,编写全部代码并调试运行。
这主要是考查面试者代码书写和编程的熟练程度。
值得注意的是,这类面试题要求能够正确运行,往往要求面试者使用比较原始的JDK编译方式也就是使用DOS命令提示符,而不是提供Eclipse或者JBuilder等快速开发环境。
本章将经常出现的上机编程题进行分类,希望能够给读者带来帮助和启示。
17.1 Java基础编程试题(1)在上机编程类的面试题中,大部分涉及基础编程,例如算法、语法、常用的类等知识点。
面试题1 怎样截取字符串考题题干编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF"6,应该输出"我ABC",而不是"我ABC+汉的半个"。
试题分析本面试题容易产生困惑的是中文字符和英文字符,在这里需要考虑汉字和英文字符的占用字节数问题,中文字符占两个字节,英文字符占一个字节,理解了这个,就很容易完成本题了。
参考答案具体代码实现如下:1.package core_java;2.import java.util.Scanner;3.public class InterceptionStr {4.static String ss;//要进行截取操作的字符串5.static int n;//截取的字符串的字节数6.public static void main(String[] args) {7. System.out.println("请输入字符串:");8. Scanner scStr = new Scanner(System.in);//从键盘获取字符串9. ss = scStr.next(); //将Scanner对象中的内容以字符串的形式取出来10. System.out.println("请输入字节数:");11. Scanner scByte = new Scanner(System.in);//从键盘获取字符串12. n = scByte.nextInt();//将Scanner对象中的内容以数值的形式取出来13. Interception(setValue());//方法与方法间的套用14. }15.public static String[] setValue() {//此方法的作用是将字符串转换成字符串数组16. String[] string = new String[ss.length()];//创建一个字符数组string17.for (int i = 0; i < string.length; i++) {18. string[i] = ss.substring(i, i + 1);19.//将字符串ss中的第i个字符取出,放入字符数组中string中20. }21.return string;//将这个字符数组返回22. }23.public static void Interception(String[] string) {24.int count = 0;25. String m = "[\u4e00-\u9fa5]";//汉字的正则表达试26. System.out.println("以每" + n + "字节划分的字符串如下所示:");27.for (int i = 0; i < string.length; i++) {28.if (string[i].matches(m)) {29.//将字符数组中的每一个元素与表则表达式进行匹配,如果相同则返回true30. count = count + 2;//如果当前字符是汉字,计数器count就加231. } else {32. count = count + 1;//如果当前字符不是汉字,计数器count就加133. }34.if (count < n) {//如果当前计数器count的值小于n,则输出当前字符35. System.out.print(string[i]);36. } else if (count == n) {//如果当前计数器count的值等于n,则输出当前字符37. System.out.print(string[i]);38. count = 0;39. System.out.println();//内循环结果,则需要换行,起到控制打印格式的作用40. } else {41. count = 0;//如果当前计数器count的值大于n,则计数器count清零,接着执行外部循环42. System.out.println();43. }44. }45. }46.}17.1 Java基础编程试题(2)面试题2 怎样实现元素互换考题题干从键盘上输入10个整数,并将其放入一个一维数组中,然后将其前5个元素与后5个元素对换,即:第1个元素与第10个元素互换,第2个元素与第9个元素互换…第5个元素与第6个元素互换。
这10大C语言基础算法,在面试中会经常遇到!

这10大C语言基础算法,在面试中会经常遇到!这10大基础算法,在面试中会常常碰到!算法是一个程序和软件的灵魂,作为一名优秀的程序员,惟独对一些基础的算法有着全面的把握,才会在设计程序和编写代码的过程中显得得心应手。
本文是近百个C 语言算法系列的其次篇,包括了经典的Fibonacci数列、简易计算器、回文检查、质数检查等算法。
大概他们能在你的毕业设计或者面试中派上用场。
1、计算Fibonacci数列 Fibonacci数列又称斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21。
C语言实现的代码如下:/* Displaying Fibonacci sequence up to nth term where n is entered by user. */include int main(){ int count, n, t1=0, t2=1, display=0; printf("Enter number of terms: ");scanf("%d", printf("Fibonacci Series: %d+%d+", t1, t2); /* Displaying first two terms */ count=2; /* count=2 because first two terms are already displayed. */ while (count结果输出:Enter number of terms: 10Fibonacci Series: 0+1+1+2+3+5+8+13+21+34+也可以用法下面的源代码:/* Displaying Fibonacci series up to certain number entered by user. */ include int main(){ int t1=0, t2=1, display=0, num; printf("Enter an integer: "); scanf("%d", printf("Fibonacci Series: %d+%d+", t1, t2); /* Displaying first two terms */ display=t1+t2; while(display结果输出:Enter an integer: 200Fibonacci Series:0+1+1+2+3+5+8+13+21+34+55+89+144+ 2、回文检查源代码:/* C program to check whether a number is palindrome or not */ include int main(){ int n, reverse=0, rem,temp; printf("Enter an integer: "); scanf("%d", temp=n; while(temp!=0) { rem=temp%10;reverse=reverse*10+rem; temp/=10; } /* Checking if number entered by user and it's reverse number is equal. */if(reverse==n) printf("%d is a palindrome.",n); else printf("%d第1页共5页。
程序员面试必备算法题

程序员面试必备算法题在当今的科技时代中,程序员一直是最热门和最新颖的职业之一。
在大多数招聘公司中,算法是面试必备的技能之一。
随着 IT 行业的发展和竞争的日益激烈,能够解决复杂问题的高效算法已成为软件工程师所必备的技能之一。
程序员面试中的算法题涵盖了大量的知识点,我们需要掌握各种不同的数据结构、算法和编程技巧。
因此,我们需要花费大量的时间和精力来获得这一技能。
为了准备好程序员面试,我们需要掌握以下的算法题。
1. 字符串反转这是一个十分常见的算法题,其核心思想是将给出的字符串中的所有字符进行反转。
比如,原字符串是 \"Hello, World!\",则反转之后的字符串就是 \"!dlroW ,olleH\"。
2. 查找最大值和最小值这个算法题需要我们在一个给定的数组中查找出其最大值和最小值。
这个问题看似简单,但实际上却涉及到了许多复杂的算法和数据结构。
3. 寻找字符串中第一个不重复的字符这个算法题需要我们在一个字符串中查找出第一个不重复的字符。
我们可以使用哈希表或是散列表来实现这一算法。
4. 快速排序快速排序是一种常见的排序算法,其核心思想是分而治之,采用递归的方式来解决问题。
快速排序在面试中的出现频率很高,掌握这一算法可为我们赢得高分。
5. 求解斐波拉契数列斐波拉契数列是一组非常熟悉的数列,其规律为:第一项为 0,第二项为1,从第三项开始,每一项都是其前两项之和。
这个算法题需要我们采用递归的方式来求解斐波拉契数列中的每一项。
6. 链表反转链表反转是一个非常重要的算法题,其核心思想是将链表中的节点按照相反的顺序进行排列。
7. 查找两个有序数组的中位数这个算法题需要我们在两个已排序的数组中查找中位数。
这个问题涉及到二分搜索等多种算法,需要我们具备较高的数学和计算机科学功底。
总结:算法是程序员面试中的必备技能之一。
通过掌握各种不同的数据结构、算法和编程技巧,我们可以更加高效地解决问题。
计算机二级上机考试常有算法ppt课件

#define N 5
int fun (int w[][N])
{
int i,j,k=0;
int s=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i==0||i==N-1||j==0||j==N-1) /*只要下标中有一个为0或N-1,则它一定是周边元素*/
{s=s+w[i][j]*w[i][j];
int i=0; while(n>0) {
str[i]=n%10+'0'; n/=10; i++; } str[i]='\0'; }
5
数组特殊位置元素的确定
1:下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun(),函数的功能 是:求出数组周边元素的平方和并作为函数值返回给主函数中的s。
for(j=i;j<N;j++) a[i][j]=a[i][j]*m;
}
7
最大公约数与最小公倍数
1:请补充main函数,该函数的功能是:输入两个正整数m
和n,求这两个数的最大公约和最小公倍数。(题盘34-2 83-2)
#include <stdio.h>
main()
{
Байду номын сангаас
int a, b, n, m, t;
}
}
9
字符串逆序存放
1:请补充函数fun(),该函数的功能是:把从主函数中输入的字符串str2倒置后 接在字符串str1后面。 例如:str1="How do",str2="?od uoy",结果输出:"How do you do?"。
计算机考试必备公式与算法

计算机考试必备公式与算法在计算机考试中,掌握一些基本的公式与算法是非常重要的。
这些公式与算法可以帮助我们解决各种计算机科学问题,提高解题的效率。
本文将从公式和算法两个方面来介绍一些在计算机考试中必备的内容。
一、计算机考试必备公式1. 算术运算公式在计算机编程中,我们经常需要进行各种算术运算,如加法、减法、乘法和除法。
以下是一些常用的算术运算公式:加法:a + b = c减法:a - b = c乘法:a × b = c除法:a ÷ b = c2. 平均值公式计算平均值在计算机考试中常会用到,以下是计算平均值的公式:平均值:avg = (a1 + a2 + a3 + ... + an) / n其中a1、a2、a3等为数据集中的各个数值,n为数据集的数量。
3. 阶乘公式阶乘在计算机科学中也是常用的概念,以下是阶乘的公式:n的阶乘:n! = n × (n-1) × (n-2) × ... × 1其中n为要计算阶乘的数。
4. 斐波那契数列公式斐波那契数列是一个非常经典的数列,在计算机考试中经常会考察该数列的计算。
以下是斐波那契数列的公式:第n个斐波那契数:F(n) = F(n-1) + F(n-2)其中F(1) = 1,F(2) = 1。
5. 指数幂公式指数幂在计算机科学中也是常用的,以下是指数幂的公式:a的b次方:a^b = a × a × a × ... × a (共b个a相乘)其中a为底数,b为幂。
以上是一些在计算机考试中常用的公式,掌握这些公式可以帮助我们更好地解题。
二、计算机考试必备算法除了公式外,一些常见的算法也是在计算机考试中必备的。
以下介绍几个常用的算法:1. 线性搜索算法线性搜索算法是一种简单直观的搜索算法。
它的基本思想是逐个比较待搜索的元素与目标元素,直到找到匹配或搜索完所有元素。
2. 二分搜索算法二分搜索算法是一种高效的搜索算法,适用于已排序的数据集。
算法面试题目

算法面试题目算法在计算机科学中起着重要的作用,面试中经常会涉及到算法的相关问题。
在本篇文章中,我将为您介绍一些常见的算法面试题目,以及它们的解决方法。
1. 最长公共前缀题目描述:给定一个字符串数组,要求找出这些字符串的最长公共前缀。
解决方法:我们可以遍历所有字符串的每个字符,对比是否相同。
如果相同,则继续对比下一个字符,直到找到最长公共前缀或者遍历完所有字符串。
2. 两数之和题目描述:给定一个整数数组和一个目标值,在数组中找到两个数,使它们的和等于目标值。
解决方法:可以通过两层循环遍历数组,将每两个数之和与目标值进行比较。
如果找到了满足条件的两个数,则返回它们的下标。
3. 反转链表题目描述:给定一个单链表,将其反转。
解决方法:可以使用三个指针,依次将当前节点的指针指向前一个节点,然后依次往后移动指针,直到链表反转完毕。
4. 二分查找题目描述:给定一个有序数组和一个目标值,在数组中查找目标值的位置。
解决方法:可以使用二分查找算法,将数组分为两部分,通过比较目标值与中间元素的大小来确定下一步查找的范围,直到找到目标值或者确定不存在。
5. 快速排序题目描述:给定一个无序数组,要求对其进行快速排序。
解决方法:可以选择数组中的一个元素作为基准值,然后将数组分为两部分,左边部分的元素小于基准值,右边部分的元素大于基准值。
然后对左右两部分递归进行快速排序,直到完成排序。
以上是几个常见的算法面试题目和解决方法,希望对您有所帮助。
在面试时,除了掌握算法的解决思路,理解其原理和实现方法也是非常重要的。
通过不断练习和思考,相信您能够在算法面试中取得好的成绩。
机试算法题

机试算法题标题:机试算法题:掌握编程关键在当今信息时代,计算机科学与技术已经渗透到我们生活的各个领域。
对于程序员来说,算法是其必备的技能之一,而机试算法题则是衡量一个程序员技术水平的重要手段。
本文将详细介绍机试算法题的相关知识,并探讨如何有效地解决这些问题。
一、什么是机试算法题?机试算法题,顾名思义,就是在计算机上进行的算法题目测试。
这类题目通常涉及到数据结构、排序、查找、递归、动态规划等基础算法知识,以及一些高级算法如图论、字符串匹配、最短路径等。
通过解决这些题目,可以检验和提高程序员的逻辑思维能力、问题解决能力和代码编写能力。
二、机试算法题的重要性1. 提升编程能力:算法是编程的基础,理解和掌握算法能够提升我们的编程能力。
只有熟练掌握各种算法,才能在面对复杂问题时游刃有余。
2. 培养逻辑思维:解决算法题需要严密的逻辑思维,这不仅能帮助我们在编程中避免错误,也能在日常生活中提高我们的决策能力。
3. 提高解决问题的能力:通过解决算法题,我们可以学习到如何分析问题、如何设计解决方案、如何优化解决方案等技巧,这对于提高我们解决问题的能力有着极大的帮助。
三、如何解决机试算法题?1. 理解题目:首先,我们需要仔细阅读题目,理解题目的要求,明确我们要解决的问题是什么。
2. 设计算法:然后,我们需要根据题目的要求,设计出解决问题的算法。
这个过程中,我们需要运用我们所学的算法知识,选择合适的算法来解决问题。
3. 编写代码:设计好算法后,我们需要将其转化为代码。
在这个过程中,我们需要注意代码的可读性和效率。
4. 测试代码:编写完代码后,我们需要对代码进行测试,确保其能够正确地解决问题。
5. 优化代码:如果代码的效率不高,我们需要对其进行优化,使其在满足题目要求的同时,尽可能地提高运行效率。
四、总结机试算法题是检验和提高程序员技术水平的重要手段,它能帮助我们提升编程能力、培养逻辑思维、提高解决问题的能力。
要解决好机试算法题,我们需要理解题目、设计算法、编写代码、测试代码和优化代码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
判断素数
1:请编写一个函数void fun(int m, int k, int xx[]),该函数的功能是: 将大于整数m且紧靠m的k个非素数存入所指的数组中。 例如,若输入15,5,则应输出16,18,20,21,22。 void fun(int m, int k, int xx[]) { int i,j,n; for(i=m+1,n=0;n<k;i++) /*找大于m的非素数,循环k次,即找出紧靠 m的k个非素数*/ for(j=2;j<i;j++) /*判断一个数是否为素数*/ if(i%j==0) { xx[n++]=i; /*如果不是素数,放入数组xx中*/ break; /*并跳出本层循环,判断下一个数*/ } }
全国二级C语言
上机典型题型
运用/和%分离整数的各位
1:请编写函数fun,其功能是:将两个两位数的正整数a、b 合并形成一个整数放在c中。合并的方式是:将a数的十位和 个位数依次放在c数个位和十位上,b数的十位和个位数依次 放在c数的百位和千位上。 例如,当a=16,b=35,调用该函数后,c=5361。 #include<stdio.h> void fun(int a ,int b,long *c) { *c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10; }
数组特殊位置元素的确定
1:下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun(),函数的功能 是:求出数组周边元素的平方和并作为函数值返回给主函数中的s。 #define N 5 int fun (int w[][N]) { int i,j,k=0; int s=0; for(i=0;i<N;i++) for(j=0;j<N;j++) if(i==0||i==N-1||j==0||j==N-1) /*只要下标中有一个为0或N-1,则它一定是周边元素*/ {s=s+w[i][j]*w[i][j]; /*将周边元素求平方和*/ } return s; /*返回周边元素的平方=0,k=0,j=0,n; n=strlen(str); while(i<n) {if (str[i]==substr[j]) j++; if (substr[j]==‘\0’) {k++;j=0;} i++; } return k;
字符串移动
1:下列给定程序中,函数fun()的功能是:在字符串str中找出ASCⅡ码值最小的字 符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。例如,调用 fun()函数之前给字符串输入fagAgBDh,调用后字符串中的内容为AfaggBDh。 void fun(char *p) { char min, *q; int i=0; min=p[i]; while (p[i]!=0)
/* *a!=‘\0’或*a!=0*/
字符串逆序存放
1:请补充函数fun(),该函数的功能是:把从主函数中输入的字符串str2倒置后 接在字符串str1后面。 例如:str1="How do",str2="?od uoy",结果输出:"How do you do?"。 #define N 40 void fun(char *str1,char *str2) { int i=0,j=0,k=0,n; char ch; char *p1=str1; char *p2=str2; while(*(p1+i))i++; while(*(p2+j))j++; n= j--; for(;k<=j/2;k++,j--) { ch=*(p2+k); *(p2+k)=*(p2+j); *(p2+j)=ch; } *(p2+n)='\0'; for(;*p2;i++) *(p1+i)=*p2++; *(p1+i)='\0'; }
求串长(指针数组存储串)
char a[80]; int n=0; while (a[n]!=‘\0’)/*(a[n])或a[n]!=0*/ n++; /*n 即为串长*/
char a[80]; int n=0; for (;a[n];n++); /*(a[n])或a[n]!=0*/ /*n 即为串长*/
2:补充函数fun(char *s),该函数的功能是把字符串中的内容逆置。 例如:字符串中原有的字符串为abcde,则调用该函数后,串中的内容变 为edcba。 #include<string.h> #include<conio.h> #include<stdio.h> #define N 81 void fun(char*s) { int i=0, n=strlen(s);char t; for(; i<n/2 ;i++) { t=*(s+i); *(s+i)=*(s+n-1-i); *(s+n-1-i)=t; } }
2:下列程序定义了N×N的二维数组,并在主函数中自动赋值。 请编写函数fun(int a[][N], int n),该函数的功能是:使数 字右(左)上半三角元素中的值乘以m。 #define N 5 int fun(int a[][N], int m) { int i,j; for(i=0;i<N;i++) for(j=i;j<N;j++) a[i][j]=a[i][j]*m; }
#include<stdio.h> #define N 1000 void fun(char *tt,int num[]) { int i,j; int bb[10]; char *p=tt; for(i=0;i<10;i++) { num[i]=0; bb[i]=0; } while(*p) {if(*p>='0'&&*p<='9') bb[*p-'0']++; p++;} for(i=1,j=0;i<10;i=i+2,j++) num[j]=bb[i]; }
do {
c[i]=n%base; i++; n=n/base;} while(n!=0);
printf("Transmite new base:\n");
for(--i;i>=0;--i) { d=c[i];printf("%c",b[d]);} printf("\n"); }
4:请补充函数fun(),该函数的功能是:把一个整数转换成字符串,并倒序保存 在字符数组str中。例如:当n=13572468时,str="86427531"。 #include<stdio.h> #include<conio.h> #define N 80 char str[N]; void fun(long int n) { int i=0; while(n>0) { str[i]=n%10+'0'; n/=10; i++; } str[i]='\0'; }
2:数组xx[N]保存着一组3位数的无符号正整数,其元素的个数通过变量num传入函数
fun()。请补充函数fun(),该函数的功能是:从数组xx中找出个位和百位的数字相等的所有 无符号整数,结果保存在数组yy中,其个数由函数fun()返回。 例如:当xx[8]={135,78,72,32,222,424,333,141,541}时,bb[6]={787,232,222,424,333,141}。 #include<conio.h> #define N 1000 int fun(int xx[],int bb[],int num) { int i,n=0;
#define N 80 void fun(char *s,int *num) { int i,n=0; for(i=0; i<*num ;i++) {if(s[i]>='a'&&s[i]<='z'&&(s[i+1]==' '||s[i+1]=='\0')) *num=n; n++;}
}
3:请补充函数fun(),该函数可以统计一个长度为n的字符串在另一个字符串 中出现的次数。例如,假定输入的字符串为:asd ascasdfg asd as asd mlosd, 子字符串为asd,则应输出4。20-3 算法1: int fun(char *str,char *substr) {int n; char *p,*r; n=0; while(*str) {p=str; r=substr; while(*r) if(*r==*p) {r++; p++;} else break; if(*r=='\0') n++; str++; } return n;}
2:str是全部由小写字母字符和空格字符组成的字符串,由num传入字 符串的长度。请补充函数fun(),该函数的功能是:统计字符串str中的单 词个数,结果由变量num传回。每个单词之间都由空格隔开,并且字符 串str开始不存在空格。 例如:str="how do you do",结果为:num=4。