前沿
著名计算机科学家沃思(Nikiklaus Wirth)提出一个公式: 算法 + 数据结构 = 程序
基础算法是面试中必须要克服的障碍,因此,开始基础算法系列的旅程吧!
算法之旅
1. Fibonacci数列
[1]. 快乐的LeetCode — 面试题10- I. 斐波那契数列
[2]. 剑指offer面试题09----斐波拉契数列
2. 回文检查
给出的数在逆序后可能超过int范围,可以赋值给long后再逆序。
#include <stdio.h>
int main()
{
int x;
scanf("%d", &x);
if (x < 0)
printf("%d is not a palindrome.\n",x);
long temp = x, y = 0;
while (temp) {
y = y * 10 + temp % 10;
temp /= 10;
}
if (x == y)
printf("%d is a palindrome.\n",x);
else
printf("%d is not a palindrome.\n",x);
return 0;
}
3. 质数检查
#include <stdio.h>
int main()
{
int x, i, flag=0;
scanf("%d", &x);
for(i=2;i<x/2;i++)
if (x % i == 0){
flag = 1;
break;
}
if (flag == 0)
printf("%d is a prime number.\n",x);
else
printf("%d is not a prime number.\n",x);
return 0;
}
4. 打印金字塔和三角形
使用 * 建立三角形
*
* *
* * *
* * * *
* * * * *
#include <stdio.h>
int main()
{
int i,j,n;
scanf("%d", &n);
for(i=1;i<=n;i++){
for(j=1;j<=i;j++)
printf("*");
printf("\n");
}
return 0;
}
使用 * 建立三角形
*
* * *
* * * * *
* * * * * * *
* * * * * * * * * *
#include <stdio.h>
int main()
{
int i,j,k,n;
scanf("%d", &n);
for(i=1;i<=n;i++){
for(k=i;k<=n-1;k++){
printf(" ");
}
for(j=1;j<=(2*i)-1;j++){
printf("*");
}
printf("\n");
}
return 0;
}
5. 简单的加减乘除计算器
# include <stdio.h>
int main()
{
char o;
float num1,num2;
printf("Enter operator either + or - or * or divide : ");
scanf("%c",&o);
printf("Enter two operands: ");
scanf("%f%f",&num1,&num2);
switch(o) {
case '+':
printf("%.1f + %.1f = %.1f",num1, num2, num1+num2);
break;
case '-':
printf("%.1f - %.1f = %.1f",num1, num2, num1-num2);
break;
case '*':
printf("%.1f * %.1f = %.1f",num1, num2, num1*num2);
break;
case '/':
printf("%.1f / %.1f = %.1f",num1, num2, num1/num2);
break;
default:
/* If operator is other than +, -, * or /, error message is shown */
printf("Error! operator is not correct");
break;
}
return 0;
}
6. 检查一个数能不能表示成两个质数之和
# include <stdio.h>
int main()
{
int n, num, i, flag;
int prime(int x);
printf("Enter one number :");
scanf("%d", &n);
for(i=2; i<n-1; i++){
flag = 0;
if(prime(i)){
num = n - i;
if (num >= i && num < n-1 && prime(num))
flag = 1;
}
if (flag == 1){
printf("%d + %d = %d", i, num, n);
printf("\n");
}
}
return 0;
}
int prime(int x)
{
int k, flag=0;
for(k=2;k<x/2;k++)
if (x % k == 0){
flag = 1;
break;
}
if (flag == 0)
return true;
else
return false;
return 0;
}
7. 用递归的方式颠倒字符串
# include <stdio.h>
int main()
{
void Reverse();
printf("Enter a sentence:\n");
Reverse();
printf("\n");
return 0;
}
void Reverse()
{
char c;
scanf("%c", &c);
if(c != '\n')
{
Reverse();
printf("%c",c);
}
}
8. 实现二进制与十进制之间的相互转换
#include <stdio.h>
#include <math.h>
int binary_decimal(int n);
int decimal_binary(int n);
int main()
{
int n;
char c;
printf("Instructions:\n");
printf("1. Enter alphabet 'd' to convert binary todecimal.\n");
printf("2. Enter alphabet 'b' to convert decimal tobinary.\n");
scanf("%c",&c);
if(c =='d' || c == 'D')
{
printf("Enter a binary number: ");
scanf("%d", &n);
printf("%d in binary = %d in decimal", n, binary_decimal(n));
}
if(c =='b' || c == 'B')
{
printf("Enter a decimal number: ");
scanf("%d", &n);
printf("%d in decimal = %d in binary", n, decimal_binary(n));
}
return 0;
}
int decimal_binary(int n) /* Function to convert decimal to binary.*/
{
int rem, i=1, binary=0;
while (n!=0)
{
rem=n%2;
n/=2;
binary+=rem*i;
i*=10;
}
return binary;
}
int binary_decimal(int n) /* Function toconvert binary to decimal.*/
{
int decimal=0, i=0, rem;
while (n!=0)
{
rem = n%10;
n/=10;
decimal += rem*pow(2,i);
++i;
}
return decimal;
}
9. 实现二进制与十进制之间的相互转换
#include <stdio.h>
int main(){
int r,c,a[100][100],b[100][100],sum[100][100],i,j;
printf("Enter number of rows (between 1 and 100): ");
scanf("%d", &r);
printf("Enter number of columns (between 1 and 100): ");
scanf("%d", &c);
/* Storing elements of first matrix enteredby user. */
for(i=0;i<r;i++)
{
for(j=0;j<c;j++){
printf("Enter element a%d%d: ",i+1,j+1);
scanf("%d", &a[i][j]);
}
}
/* Storing elements of second matrixentered by user. */
for(i=0;i<r;i++)
{
for(j=0;j<c;j++){
printf("Enter element b%d%d: ",i+1,j+1);
scanf("%d", &b[i][j]);
}
}
/*Adding Two matrices */
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
sum[i][j] = a[i][j] + b[i][j];
}
/* Displaying the resultant sum matrix. */
for(i=0;i<r;i++)
{
for(j=0;j<c;j++){
printf("%d", sum[i][j]);
printf(" ");
if(j==c-1)
printf("\n");
}
}
return 0;
}
10. 矩阵转置
#include <stdio.h>
int main(){
int r,c,a[100][100],b[100][100],i,j;
printf("Enter number of rows (between 1 and 100): ");
scanf("%d", &r);
printf("Enter number of columns (between 1 and 100): ");
scanf("%d", &c);
/* Storing element of matrix entered byuser in array a[][]. */
for(i=0;i<r;i++)
{
for(j=0;j<c;j++){
printf("Enter element a%d%d: ",i+1,j+1);
scanf("%d", &a[i][j]);
}
}
/* Finding transpose of matrix a[][] and storing it in array b[][]. */
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
b[j][i] = a[i][j];
}
/* Displaying the transpose,i.e, Displayingarray trans[][]. */
for(i=0;i<c;i++)
{
for(j=0;j<r;j++){
printf("%d", b[i][j]);
printf(" ");
if(j==r-1)
printf("\n");
}
}
return 0;
}
题目来源