写过的算法题

1.奇数偶数算法
#include <stdio.h>
int main()
{
int a;
int b;
printf(“please input an number: “);
scanf(”%d”,&a);
b=a%2;
if(b=0)
printf(“This is an even number\n”);
else
printf(“This is an old number\n”);
return(0);
}

2.阶乘vi
#include <stdio.h>
int main()
{
int i,p,n;
printf(“please input an integer: “);
scanf(”%d”,&n);
p=1;
for(i=2;i<=n;i=i++)
{
p=p*i;
}
printf("%d",p);
return (0);
}
3.100以内素数
#include <stdio.h>
int main()
{
int i,n,s;
printf(“2 “);
for(n=3;n<=100;n++)
{
for(i=2;i<n;i++)
{
s=n%i;
if(s==0)
break;
}
if(s!=0)
printf(”%d “,n);
}
return 0;
}
4.1~100和
#include <stdio.h>
int main()
{
int i,n,s;
printf(“please input an integer : “);
scanf(”%d”,&n);
s=0;
for(i=1;i<=n;i++)
{
s+=i;
}
printf(”%d”,s);

return 0;

}
5.比较6个数大小
#include <stdio.h>
int main()
{
int a,b,c,d,e,f;
int max;
printf(“please input six integer: “);
scanf(”%d”,&a);
scanf("%d",&b);
scanf("%d",&c);
scanf("%d",&d);
scanf("%d",&e);
scanf("%d",&f);
max=0;
if(a>max) max=a;
if(b>max) max=b;
if(c>max) max=c;
if(d>max) max=d;
if(e>max) max=e;
if(f>max) max=f;
printf("%d",max);
return 0;
}
一样的
#include <stdio.h>
int main()
{
int a,b,c,d,e,f;
int max;
printf(“please input six integer: “);
scanf(”%d %d %d %d %d %d”,&a,&b,&c,&d,&e,&f);
max=0;
if(a>max) max=a;
if(b>max) max=b;
if(c>max) max=c;
if(d>max) max=d;
if(e>max) max=e;
if(f>max) max=f;
printf("%d",max);
return 0;
}
6.10个数冒泡排序
#include <stdio.h>
int main()
{
int i,j,s;
int a[10];
printf(“please input ten integers: \n”);
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
{
for(j=i;j>0;j–)
{
if(a[j]<a[j-1])
{
s=a[j-1];
a[j-1]=a[j];
a[j]=s;
}
}
}
for(i=0;i<10;i++)
printf("%d “,a[i]);
return 0;
}
7. 费式数列前20项
#include <stdio.h>
int main()
{
int f[20];
int i;
f[0]=1,f[1]=2;
for(i=2;i<20;i++)
f[i]=f[i-1]+f[i-2];
for(i=0;i<20;i++)
printf(”%d “,f[i]);
printf(”\n");
return 0;
}
8.巴斯卡三角形 13
#include <stdio.h>
int main()
{
int i,j;
int a[13][25]={};
j=12;
a[0][j]=1;
for(i=1;i<13;i++)
{
for (j=0;j<25;j++)
{
if((j0||j24)&i!=12)
a[i][j]=0;
else if((j0||j24)&i12)
a[i][j]=1;
else
a[i][j]=a[i-1][j-1]+a[i-1][j+1];
}
}
for(i=0;i<13;i++)
{
for(j=0;j<25;j++)
{
printf("%5d “,a[i][j]);
}
printf(”\n");
}
return 0;
}
9.巴斯卡三角形 n
#include <stdio.h>
int main()
{
int i,j,m,n;
printf(“please input an integer: “);
scanf(”%d”,&m);
n=2*m-1;
int a[m][n];
for(i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
a[i][j]=0;
}
}
a[0][m-1]=1;
for(i=1;i<m;i++)
{
for (j=0;j<n;j++)
{
if((j
0||jn-1)&i!=m-1)
a[i][j]=0;
else if((j
0||jn-1)&im-1)
a[i][j]=1;
else
a[i][j]=a[i-1][j-1]+a[i-1][j+1];
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%5d “,a[i][j]);
}
printf(”\n");
}
return 0;
}

10.编写一个程序,求出满足下列条件的四位数:该数是个完全平方数,且第一、三位数字之和为10,第二、四位数字之积为12
#include<stdio.h>
#include<math.h>

int main()
{
int s, a, b, c, d;

int i, max, min;

s = sqrt(1000);

min = s;

s= sqrt(9999);

max = s;

for (i=min; i<=max; i++)
{
    s = i*i;
    a = s/1000;
    b = s%1000/100;
    c = s%1000%100/10;
    d = s%10;
    a = a+c;
    b = b*d;
    if ((a == 10) && (b == 12))
    {
        printf("%d ",s);
    }
}

printf("\n");

return 0;

}

11、快速找出一个数组中的最大数、第二大数。(笔试题)
#include<stdio.h>

int main()
{

int a[10];

int i;

int max1;

int max2;

printf("please input ten integers : ");

for (i=0; i<10; i++)
{
scanf("%d ", &a[i]);
}

if (a[1] < a[0])
{
    max1 = a[0];
    max2 = a[1];
}

else
{
    max1 = a[1];
    max2 = a[0];
}

for (i=2;i<10; i++)
{
    if ((a[i] >= max2) && (a[i] >= max1))
    {
        max2 = max1;
        max1 = a[i];
    }

    else if ((a[i] >= max2) && (a[i] < max1))
         {      
             max2 = a[i];
         }
}

printf("%d %d",max1,max2);

printf("\n");

return 0;

}

12、通过编程实现,统计1~n有多少个9?(提示:n通过参数传入)(错误)见24题
#include<stdio.h>

int main()
{

int n;

int i;

int s = 1;

int sum = 0;

int rem;

int quot;

printf("please input an integer : ");

scanf("%d",&n);

for (i=0; ; i++)
{
    rem = n%10;
    quot = n/10;
    n = quot;

    if (i > 0)
    {
        sum += rem*s;
    }

    if (i >= 1)
    {
        s = s*10;
    }

    if (i == 0 && rem >= 9)
    {
        sum++;
    }

    if (quot == 0)
    {
        break;
    }
}

printf("%d",sum);

printf("\n");

return 0;

}

13、输入5个数(含负数、小数)将它们按由小到大的顺序排列起来
提示:需要排数的数字通过参数传递进来,
例如:输入:./a.out -1 2.1 -3 5 7 输出: -3 -1 2.1 5 7
#include<stdio.h>

int main()
{

float a[5];

int i;

int j;

float s;

printf("please input five numbers : ");

for (i=0; i < 5; i++)
{
    scanf("%f",&a[i]);
}

for (i=1; i < 5; i++)
{
    for (j=i; j > 0; j--)
    {
        if (a[j] < a[j-1])
        {
            s = a[j-1];
            a[j-1] = a[j];
            a[j] = s;
        }
    }
}

for (i=0; i < 5; i++)
{
    printf("%f ",a[i]);
}
printf("\n");

return 0;

}

14、一个数如果恰好等于它的因子之和,这个数被成为”完数”,例如:6=1+2+3.请编程找出1000以内的完数
#include<stdio.h>

int main()
{

int i, j;

int sum=0, rem;

for (i=1; i<=1000; i++)
{
    for (j=1; j<i; j++)
    {
        rem = i%j;
        
        if (rem == 0)
        {
            sum +=j;
        }

    }

    if (sum == i)
    {
        printf("%d ",i);
    }

    sum = 0;
}

printf("\n");

return 0;

}

15、有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.
提示:用数组完成
#include<stdio.h>

int main()
{

int n;

printf("please input an integer : ");

scanf("%d",&n);

int a[10000] = {0};

int i, j;

int q, m = 0, s = 0;

for (j=1; ;j++)
{
    if (m == n)
    {
        break;
    }
    for (i=0; i<n; i++)
    {
        if (a[i] == 1)
        {
            continue;
        }
    
        s = s+1;

        q = i+1;
        
        if (m == n)
        {
            printf("%d ", q);
            break;
        }
  
        if (s%3 == 0)
        {
            a[i] = 1;
            m += 1;
            s = 0;
        }
      
    }
    
}
printf("%d ", q);

printf("\n");

return 0;

}
16.分行排列
#include <stdio.h>

int main()
{
int sum = 0;
int p;
int i;

printf("please input an integer : ");

scanf("%d",&p);

for (i=0; i<=100; i++)
{
    sum = sum + 1;

    printf("%3d ", i);
    
    if (sum == p)
    {
        printf("\n");
        sum = 0;
    }
}
printf("\n");

return 0;

}
17.选择排序
#include<stdio.h>

int main()
{
int i;
int j;
int min;
int a[10];

printf("please input ten numbers:  ");

for (i=0; i<10; i++)
{
    scanf("%d",&a[i]);
}

for (i=0; i<10; i++)
{
    for (j=i; j<9; j++)
    {
        if (a[i] > a[j+1])
        {
            min = a[j+1];
            a[j+1] = a[i];
            a[i] = min;
        }
    }
}

for (i=0; i<10; i++)
{
    printf("%d ",a[i]);
}

return 0;

}
18.九九乘法表
#include<stdio.h>

int main()
{
int i;
int j;
int mul;

for (i=1; i<10; i++)
{
    for (j=1; j<=i; j++)
    {
        mul = i * j;

        printf("%d*%d=%d   ", i, j, mul);
    }

printf("\n");
}

printf("\n");

return 0;

}
19.十进制转八进制
#include<stdio.h>

int main()
{
int i;
int rem;
int quot;
int n;
int a[10]={0};

printf("please input an integer : ");

scanf("%d",&n);

for(i=1; ;i++)
{
    rem = n%8;
    quot = n/8;
    n = quot;
    a[i-1] = rem;

    if(n == 0)
    {
        break;
    }
}

for(i=9; i>=0; i--)
{
     if(a[i] != 0)
     {
         printf("%d",a[i]);
     }
}

printf("\n");

return 0;

}

20.题目:编写程序,打印出9×9乘法表
#include<stdio.h>

int main()
{
int i;
int j;
int mul;

for (i=1; i<10; i++)
{
    for (j=1; j<=i; j++)
    {
        mul = i * j;

        printf("%d*%d=%d   ", i, j, mul);
    }

printf("\n");
}

printf("\n");

return 0;

}

21.题目:编写程序,实现strcmp()相同功能myStrcmp()函数
#include<stdio.h>

int main()
{
char ch1[10];
char ch2[10];
int i;
int s;

for(i=0; i<10; i++)
{
    scanf("%s", &ch1);
}

for(i=0; i<10; i++)
{
    scanf("%s", &ch2);
}


for (i=0; i<10; i++)
{
    if (ch1[i] < ch2[i])
    {
        s = -1;  //printf("-1");
    }
    
    else if (ch1[i] == ch2[i])
    {
        s = 0;    //printf("0");
    }
     
    else 
    {
        s = 1;    //printf("1");
    }
}

printf("%d",s);

return s;

}

22.题目:编写程序,将十进制转换为8进制并输出(不允许使用printf("%o"))
#include<stdio.h>

int main()
{
int i;
int rem;
int quot;
int n;
int a[10]={0};

printf("please input an integer : ");

scanf("%d",&n);

for(i=1; ;i++)
{
    rem = n%8;
    quot = n/8;
    n = quot;
    a[i-1] = rem;

    if(n == 0)
    {
        break;
    }
}

for(i=9; i>=0; i--)
{
     if(a[i] != 0)
     {
         printf("%d",a[i]);
     }
}

printf("\n");

return 0;

}

23.题目:编写程序,打印菱形星号组合
*
* *

  • *
    

#include<stdio.h>

int main()
{
char a[7][7];
int i;
int j;
int s = 3;

for (i=0; i<7; i++)
{
    for (j=0; j<7; j++)
    {
        if (j != i)
        {
            continue;
        }

        if (i <= 3)
        {
            a[i][s-j] = '*';
            a[i][s+j] = '*';
        }

        else
        {
            a[i][s-(6-j)] = '*';
            a[i][s+(6-j)] = '*';
        }   
    }    
}

for (i=0; i<7; i++)
{
    for (j=0; j<7; j++)
    { 
        if (a[i][j] == '*')
        {
            printf("*");
        }
        
        else 
        {
            printf(" ");
        }
    }

    printf("\n");
}

return 0;

}

24.题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。(google面试题)

例如  输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。
分析:这是一道广为流传的google面试题

#include<stdio.h>

int main()
{

int n;
int i;
int sum1 = 0;
int sum2 = 0;
int rem;
int quot;
int a[10] = {0};

a[0] = 0;
a[1] = 1;

printf("please input an integer : ");

scanf("%d",&n);

if (n != 1)
{
    for (i=2; ; i++)
    {
        rem = n%10;
        quot = n/10;
        a[i] = 10*a[i-1];

        if (i > 2)
        {
            sum2 = a[i-2]+10*sum2;
        }

        if (rem > 1)
        {
            sum1 = sum1+a[i-1]+(rem*a[i-2]);
        }
    
        if ((rem == 1) && (i > 2))
        {
            sum1 = sum1+sum2;
        }
    
    
        if ((rem == 1) && (i == 2))
        {
            sum1+=1;
        }

        if (quot == 0)
        {
            break;
        }
    
         n = quot;
    }

    if (n == 1)
    {
        sum1+=1;
    }
 
    printf("%d",sum1);
}

else
{  
    printf("1");
}

printf("\n");

return 0;

}

25.题目请编写一个c函数,该函数给出一个字节中被置为1的位的个数
#include<stdio.h>

int main()
{
int i;
int sum = 0;
int quot;
int rem;
int n;

printf("please input an integer: ");

scanf("%d",&n);

for (i=0; ; i++)
{
    rem = n%2;
    quot = n/2;
    n = quot;

    if (rem == 1)
    {
       sum+=1;
    }
    
    if (quot == 0)
    {
        break;
    }
}

printf("%d",sum);

printf("\n");

return 0;

}

26.题目:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1到p2位.
#include<stdio.h>

int main()
{
int b[32] = {0};
int i;
int a;
int m;
int n;
int rem;
int quot;
int sum;
int s1;
int s2;

printf("please input an integer : ");

scanf("%d",&a);

printf("please input two integers(p1,p2<32) : ");

scanf("%d%d",&m,&n);
 
for (i=31; ;i--)
{
    rem = a%2;
    quot = a/2;
    a = quot;

    if (rem == 1)
    {
        b[i] = 1;
    }
        
    if (quot == 0)
    {
        break;
    }
}
    
if (m >= n)
{   
    s1 = 32-n;
    s2 = 32-m;

    for (i=s1; i>=s2; i--)
    {
        printf("%d",b[i]);
    }
}
   
else
{
    s1 = 32-m;
    s2 = 32-n;

    for (i=s1; i>=s2; i--)
    {
        printf("%d",b[i]);
    }
}

printf("\n");

return 0;

}

27.题目:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),将该整数的二进制表示方法中从右端开始的p1到p2位取反后输出
#include<stdio.h>

int main()
{
int b[32] = {0};
int i;
int a;
int m;
int n;
int rem;
int quot;
int sum;
int s1;
int s2;

printf("please input an integer : ");

scanf("%d",&a);

printf("please input two integers(p1,p2<32) : ");

scanf("%d%d",&m,&n);
 
for (i=31; ;i--)
{
    rem = a%2;
    quot = a/2;
    a = quot;

    if (rem == 1)
    {
        b[i] = 1;
    }
        
    if (quot == 0)
    {
        break;
    }
}
    
if (m >= n)
{   
    s1 = 32-n;
    s2 = 32-m;

    for (i=s1; i>=s2; i--)
    {
        if (b[i] == 0)
        {
            b[i] = 1;
        }
        
        else
        {
            b[i] = 0;
        }

        printf("%d",b[i]);
    }
}
   
else
{
    s1 = 32-m;
    s2 = 32-n;

    for (i=s1; i>=s2; i--)
    {
        if (b[i] == 0)
        {
            b[i] = 1;
        }
        
        else
        {
            b[i] = 0;
        }

        printf("%d",b[i]);
    }
}

printf("\n");

return 0;

}

28.题目:输入一个整数a,再输入两个整数p(p<32),v(0|1),将该整数a的p位设置为v,输出修改后的该整数的二进制表示.
#include<stdio.h>

int main()
{
int b[32] = {0};
int i;
int a;
int m;
int n;
int rem;
int quot;
int sum;
int s;

printf("please input an integer : ");

scanf("%d",&a);

printf("please input two integers(p<32,v(0|1) : ");

scanf("%d%d",&m,&n);
 
for (i=31; ;i--)
{
    rem = a%2;
    quot = a/2;
    a = quot;
    sum = i;

    if (rem == 1)
    {
        b[i] = 1;
    }
        
    if (quot == 0)
    {
        break;
    }
}
    
s = 32-m;
b[s] = n;

for (i=sum; i<32; i++)
{
    printf("%d",b[i]);
}  

printf("\n");

return 0;

}

29.题目:输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果
提示:0 ^ 0 = 0; 1 ^ 1 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1;
#include<stdio.h>

int main()
{
int b[32] = {0};
int c[32] = {0};
int i;
int a;
int rem;
int quot;

printf("please input an integer : ");

scanf("%d",&a);

for (i=31; i>=0; i--)
{
    rem = a%2;
    quot = a/2;
    a = quot;

    if (rem == 1)
    {
        b[i] = 1;
        c[i] = 1;
    }
        
    if (quot == 0)
    {
        break;
    }
}

b[0] = c[1]^c[31];
b[31] = c[0]^c[30];

for (i=30; i>0; i--)
{
   b[i] = c[i-1]^c[i+1];
}

for (i=0; i<32; i++)
{
    printf("%d",b[i]);
}     

printf("\n");

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值