练习题

已有一个已排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中
输入
第一行,原始数列。 第二行,需要插入的数字。
输出
排序后的数列
样例输入
1 7 8 17 23 24 59 62 101
50
样例输出
1
7
8
17
23
24
50
59
62
101

#include"stdio.h"
int main()
{
    int a[10],i,j,number,size;
    for(i=0;i<9;i++)              //键入
    {
        scanf("%d",&a[i]);
    }
    scanf("%d",&number);
    for(i=0;i<10;i++)             //循环查找插入点
    {
        if(number<=a[i])
        {
            size=i;break;         //找到插入点后就跳=出循环
        }
    }
    for(j=9;j>size;j--)           //后移
    {
        a[j]=a[j-1];
    }
    a[i]=number;
    for(i=0;i<10;i++)
    {
        printf("%d\n",a[i]);
    }
    return 0;
}

输入10个数倒序输出

#include <stdio.h>
int main()
{
    int i,a[10],*p;
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }

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


    for(i=9;i>=0;i--)
    {
        printf("%d",*p);
        p--;
    }

}

给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123

#include <stdio.h>
int main()
{
    int number,b,c=0,i=0,a[5];
    scanf("%d",&number);
    while(number>0)
    {
        c++;
        a[i]=number%10;
        i++;
        number/=10;

    }
    printf("%d\n",c);
    for(i=c-1;i>=1;i--)
    printf("%d ",a[i]);
    printf("%d\n",a[0]);


}

编写一个程序,输入a、b、c三个值,输出其中最大值。

#include<stdio.h>
int main()
{
    int a,b,c;
    printf("Input three numbers:");
    scanf("%d %d %d", &a, &b,&c);
    printf("max=%d\n", (a>b?a:b)>c?(a>b?a:b):c);
    return 0;
}

输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。

#include<stdio.h>
int main(void)
{
  char ch;
  int character=0,number=0,blank=0,other=0;
  while((ch=getchar())!='\n')//循环读取一个字符,直到读取到'\n'结束('\n'也就是回车)
 {
   if(ch>='A' && ch<='Z' || ch>='a' && ch<='z')
   {
     character++;
   }
   else if(ch>='0' && ch<='9')
   {
     number ++;
   }
   else if(ch==' ')
   {
     blank++;
   }
   else 
   { 
     other ++;
   }
}
   printf("%d %d %d %d\n",character,number,blank,other);
   return 0;
}

求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字,为2。 例如,n=5时=2+22+222+2222+22222,n由键盘输入。

#include <stdio.h>
int main()
{
    int i,a=2,b,sum1=0,sum=0;
    scanf("%d",&b);
    for(i=1;i<=b;i++)
    {
        sum1=sum1*10+a;
        sum=sum+sum1;


    }
    printf("%d",sum);
}

求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。

#include <stdio.h>
int main()
{
    int n,i=1,a=1,sn=0;
    scanf("%d",&n);
    while(i<=n)
    {
        a*=i;
        sn=sn+a;
        i++;

    }
    printf("%d",a);
    return 0;
}

以下三数的和,保留2位小数 1~a之和 1~b的平方和 1~c的倒数和

#include <stdio.h>
int main()
{
    int i=1.0,a,b,c,sum1=0,sum2=0;
    double sum,sum3=0;
    scanf("%d %d %d",&a,&b,&c);
    for(i=1;i<=a;i++)
    {
        sum1+=i;

    }
    printf("%d\n",sum1);
    for(i=1;i<=b;i++)
    {
        sum2+=i*i;

    }
    printf("%d\n",sum2);
    for(i=1;i<=c;i++)
    {
        sum3+=1.0/i;

    }
    printf("%lf\n",sum3);
    sum=sum1+sum2+sum3;
    printf("%lf",sum);
    return 0;



}

一个数如果恰好等于不包含它本身所有因子之和,这个数就称为”完数”。 例如,6的因子为1、2、3,而6=1+2+3,因此6是”完数”。 编程序找出N之内的所有完数,并按下面格式输出其因子

#include <stdio.h>
int main ()
{
    int a=2,i=1,n,sum=0;
    scanf("%d",&n);
    for(a=2;a<n;a++)
    {
        sum=0;
        for(i=1;i<a;i++)
        {
            if(a%i==0)
                sum+=i;
        }
        if(sum==a)
        {   printf("%d its factors ",a);
            for(i=1;i<a;i++)
        {if(a%i==0)
            printf("%d ",i);
        }printf("\n");}

    }

}

一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数

#include <stdio.h>
int main()
{
    double m,n,i,a=0,b,b1=0;
    scanf("%lf %lf" ,&m,&n);
        for(i=1;i<=n;i++)
        {
            b=m;
            m=m/2;
            a+=b+b1;
            b1=m;


        }
    printf("%.2lf %.2lf",m,a);
}
/*公式:求a的平方根的迭代公式为:?X[n+1]=(X[n]+a/X[n])/2?要求前后两次求出的差的绝对值少于0.00001。输出保留3位小数*/
#include <stdio.h>
#include <math.h>
int main()
{
    double x,y=0,a;
    scanf("%lf",&a);
    x=a;
    while(fabs(x-y)>=0.00001)
    {
        y=x;
        x=(x+a/x)/2;
    }
    printf("%lf",x);
    return 0;
}
/*用简单素数筛选法求N以内的素数*/
#include <stdio.h>
int main()
{
    int i,j,n;
    scanf("%d",&n);
    for(i=2;i<=n;i++)
    {   int swich=0;
        for(j=i-1;j>1;j--)
        {
            if(i%j==0)
            {swich=1;
                break;
            }


        }
        if(swich==0)
        printf("%d\n",i);
    }
}
/*冒泡排序*/
#include <stdio.h>
int main()
{
    int a[10];
    int i,j,temp,k;
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    for(j=0;j<9;j++)
    {
        for(k=0;k<9-j;k++)
        {
            if(a[k]>a[k+1])
            {
                temp=a[k];
                a[k]=a[k+1];
                a[k+1]=temp;

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


}
/*
 * 冒泡排序优化一
 * 设置一个标记来标志一趟比较是否发生交换
 * 如果没有发生交换,则数组已经有序
 * */
void bubbleSort1(int arr[], int n) {
    int i = 0;
    int j = 0;
    int tmp = 0;
    int flag = 0; 
    for (i = 0; i < n; ++i) {
        flag = 0;
        for (j = 0; j < n - 1 - i; ++j) {
            if (arr[j] < arr[j + 1]) {
                flag = 1;
                tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
        if (flag == 0) {
            break;
        }
    }   
}

/*
 * 冒泡排序优化二
 * 用一个变量记录下最后一个发生交换的位置,后面没有发生交换的已经有序
 * 所以可以用这个值来作为下一次比较结束的位置
 * */
void bubbleSort2(int arr[], int n) {
    int i = 0;
    int j = 0;
    int k = 0;
    int tmp = 0;
    int flag = n; 

    for (i = 0; i < flag; ++i) {
        k = flag;
        flag = 0;
        for (j = 0; j < k; ++j) {
            if (arr[j] < arr[j + 1]) {
                flag = j;
                tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }   
}
/*求一个3×3矩阵对角线元素之和。 */
#include<stdio.h>
int main()
{
    int a[3][3]={1,2,3,1,1,1,3,2,1};
    int i,j,c=0,d=0;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
        if(i==j)
            c=c+a[i][j];
        if(i+j==2)
            d=d+a[i][j];
        }
    }

    printf("%d %d\n",c,d);
}
/*已有一个已排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中。*/
#include <stdio.h>
int main()
{
    int i,j,k,a[20];
    for(i=0;i<9;i++)
    {
        scanf("%d",&a[i]);
    }
    scanf("%d",&k);
    for(j=0;j<10;j++)
    {
        if(a[j]>=k)
        {
            break;
        }
    }
    for(i=9;i>j;i--)
    {
        a[i]=a[i-1];
    }
    a[j]=k;
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。

#include <stdio.h>
int hehe(int a,int b);
int haha(int a,int b);
int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    printf("%d %d",hehe(a,b),haha(a,b));
    return 0;
}
int hehe(int a,int b)
{
    if(b==0)
        return a;
    return hehe(b,a%b);
}
int haha(int a,int b)
{
    return a*b/hehe(a,b);
}

输出1-100的素数

#include <stdio.h>
int main()
{

 int i, n, t = 0;

 for (n=1; n<=100; ++n)
 {
  for(i=2; i<=n; ++i)
  {
   if(n%i == 0)
    break;
  }
  if (n == i)
  { 
   printf("%d ", n);
    }
 }
}

写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。

#include <stdio.h>
#include <string.h>
int box(char a[20],char b[20])
{
    int i,j,k;
    j=strlen(a);
    k=j-1;
    i=0;
    while(i<j)
    {
        b[k]=a[i];
        i++;
        k--;
    }
    return 0;
}
int main()
{
    int i,j;
    char c[20],d[20];
    gets(c);
    j=strlen(c);
    box(c,d);
    for(i=0;i<j;i++)
    {
        printf("%c",d[i]);
    }
    return 0;
}

写一函数,将两个字符串连接

#include <stdio.h>
#include <string.h>
int main()
{
    char a[100],b[100];
    gets(a);
    gets(b);
    strcat(a,b);

        printf("%s",a);
        return 0;

}

判断素数

 #include"stdio.h"
int prime(int a) 
{                   //判断素数
    int b,i;
    if (a > 2 && (a % 2 )!= 0) 
    {
        for (b = 0, i = 2; i < a; i++) 
        {
            if (a%i == 0) 
            {   
                b++;
                break;
            }
        }
        return b;
    }
    else if (a == 2)
        return 0;
    else return 1;
}
int main() 
{
        int a;
        scanf("%d", &a);
        if (prime(a) > 0)
            printf("0");
        else printf("1");
        return 0;
    }  

一个人爬楼梯,楼梯共20层,一人一步可以走一层或两层,共多少种走法?

#include <stdio.h>
int getUpstailTypes(int n)
{
    if(n==1||n==2)
        return n;
    return getUpstailTypes(n-1)+getUpstailTypes(n-2);
}

int main()
{
    int n;
    scanf("%d",&n);
    printf("%d\n", getUpstailTypes(n));
    return 0;
}

逆序输出数的几种算法

//利用函数递归方法来实现

//代码如下:
# include "stdio.h"
void f(long k) //定义了递归函数
{ 

printf("%ld", k%10);
k = k/10;
if (k>0)
f(k) ; //重点:用到了递归
} 


int main(void)
{
long n; //定义了一个long型
printf("输入任意正整数 : ");
scanf("%ld", &n); 
f(n); //调用函数f
printf("\n");
return 0;
}
//用指针+函数+字符数组方法实现 
//代码如下:
#include "stdio.h"
#include "string.h"
void f(char* arr) //定义函数f();


{ int i;


int len = strlen(arr); //计算arr数组的有效长度
char* p=&arr[len-1]; //定义了一个char类型的指针并指向最后一个字符的地址
for( i=0;i<len;i++) 
{
printf("%c",*p--); //实现用指针方法输出
}
p=NULL; //指针为空
}
int main(void)
{ char a[30]; 
printf("输入任意正整数:");
gets(a);
f(a); //调用函数f(a);
return 0;
}
//数学纯计算方法加循环
//代码如下:
#include <stdio.h> 


int main(void) 
{ 
long num; 
printf("请输入任意正整数:");
scanf("%d",&num); 


while (num > 0) //num大于0就不停循环
{ 
printf("%d",num%10); //num%10 ,输出个位 
num /= 10; //除以10 
} 
return 0;
}
//编程思路: 利用字符数组


//代码如下:
#include "stdio.h"
#include "string.h" 
int main(void)


{ int a,i;
char f[30]; //大小由程序需要定义


printf("输入任意整数:"); 

gets(f); //字符串输入函数


a=strlen(f); //strlen();函数为计算数组实际长度,不包括*\0*


puts("倒序输出为:");


for(i=a;i>=0;i--) //循环从数组末尾(*\0*前面)开始输出 


printf("%c",f[i]);


return 0; 
}
#include <stdio.h>
int reverse_num(int n)
{
    int m = n%10;
    int i = n/10;
    while (i > 0)
    {
        int a = i%10;
        m *= 10;
        m += a;
        i /= 10;
    }
    return m;
}

int main()
{
    int n = 0;
    int m = 0;
    printf("Please input a number:\n");
    scanf("%d", &n);
    printf("The reverse number is : %d\n",reverse_num(n));
    return 0;
}

用C编写程序:输入两个正整数m和n(m>=1,n<=10000),输出m~n之间所有的Fibonacci数。

#include <stdio.h>
int fib(int n)
{
    int a=1,b=0,i,t;

        for(i=1;i<n;i++)
            {
                t=a;
                a=a+b;
                b=t;
            }
        return a;

}
int main()
{
    int n,s,a,i;
    scanf("%d %d",&s,&n);
    for(i=1;i<=n;i++)
    {
        a=fib(i);
        if(a>=s&&a<=n)
        printf("%d ",a);

    }



}

将一个字符串逆序输出

#include <stdio.h>
#include <string.h>
int main()
{
    int l,i,j;
    char str[100],t;
    gets(str);
    l=strlen(str)-1;
    for(i=0,j=l;i<=j;i++,j--)
    {
    t=str[i];
    str[i]=str[j];
    str[j]=t;
    }
    printf("%s",str);

}

在一个输入的三行两列的的数组中计算各行的和

#include <stdio.h>
int main()
{
    int a[3][2],b[100],i,k,j;
    for(i=0;i<3;i++)
    {
        for(j=0;j<2;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }

    for(i=0,k=0;i<3,k<3;i++,k++)
    {   
        int j=0;
        b[k]=a[i][j]+a[i][j+1];
        printf("sum of row %d is %d\n",i+1,b[k]);
    }

}

编写子函数int Found(int *p,int n,int key);在一个含n个.首地址为a的递减整数序列中运用折半查找法返回查找结果;

#include <stdio.h>
int Found(int *p,int n,int key);
int Found(int *p,int n,int key)
{
    int low=0,high=n-1,mid;

        while(low<=high)
        {
            mid=(low+high)/2;
            if(key<*(p+mid))
                low=mid+1;
            else if(key>*(p+mid))
                high=mid-1;
            else
                return mid+1;

        }
        return -1;
}
int main()
{
    int *p,i,b,s[100],key;
    scanf("%d",&b);
    for(i=0;i<b;i++)
    {
        scanf("%d",&s[i]);
    }
    scanf("%d",&key);

    printf("%d",Found(s,b,key));
}

这里写图片描述

#include <stdio.h>
int main()
{
    int array[10];
    int *p=array,i=0,sum=0;
    for(i=0;i<10;i++)
        scanf("%d",&array[i]);
    for(i=0;i<10;i++)
    {
        sum+=*(p+i);
    }
    printf("%d",sum);
}
#include <stdio.h>
int max(int a,int b)
{
    return a>b?a:b;
}
int (*larger)(int ,int);
int main()
{
    int a,b,c;
    scanf("%d %d",&a,&b);
    larger=max;
    c=(*larger)(a,b);
    printf("%d",c);
    return 0;
}
#include<stdio.h>
void main()
{ int a[5],max,min,i;
  for ( i=0;i<5;i++ ) scanf("%d",&a[i]);
  max=min=0;
  for ( i=1;i<5;i++ ) if ( a[max]<a[i] ) max=i; else if ( a[min]>a[i] ) min=i;
  if ( min!=0 ) { i=a[0]; a[0]=a[min]; a[min]=i; }
  if ( max!=4 ) { i=a[4]; a[4]=a[max]; a[max]=i; }
  for ( i=0;i<5;i++ ) printf("%d ",a[i]); printf("\n");
}
#include<stdio.h>
void main()
{int a,b,day;
printf(" 请输入一个年份和月份:\n");
scanf("%d,%d",&a,&b);
switch(b)
{
    case 1: day=31;break;
    case 2: day=28;break;
    case 3: day=31;break;
    case 4: day=30;break;
    case 5: day=31;break;
    case 6: day=30;break;
    case 7: day=31;break;
    case 8: day=31;break;
    case 9: day=30;break;
    case 10: day=31;break;
    case 11: day=30;break;
    case 12: day=31;break;
}
if((a%4==0&&a%100!=0||a%400==0)&&b==2)  day=29;
printf("该月份有%d天\n",day);
}

一个数加上100是完全平方数,再加上168也是完全平方数输出这个数。

#include <stdio.h>
#include <math.h>
int main()
{
    double i,a,b;
    for(i=1.0;i<100000;i++)
    {
        a=sqrt(i+100);
        b=sqrt(i+100+168);
        while(a==(int)a&&b==(int)b)
        {
            printf("%lf\n",i);
            break;
        }

    }
}

计算:sum=1-1/2!+1/3!-1/4!+ …… -1/n!

#include<stdio.h>
void main()
{
double sum=0.0,i,t=1;
int s=1,n;
scanf("%d",&n);
for(i=1.0;i<=n;i++)
{
t*=i;
sum+=s/t;
s=-s;

}
printf("%.2f",sum);
}

求最小公倍数

#include <stdio.h>
int func(int m, int n);
int main()
{
    int m,n,a;
    scanf("%d %d",&m,&n);
    a=func(m,n);
    printf("%d",a);
}
int func(int m, int n)
{
    int t,i = n, j = m;
    while ((m%n)!=0)
    {
        t = n;
        n = m % n;
        m = t;

    }
    return i*j/n;
}

用静态变量求阶乘

#include<stdio.h>
int fun(int n)
{
    static int f=1;
    f=f*n;
    return f;
}
void main()
{
    int i,n;
    scanf("%d",&n);

    for(i=1;i<=n;i++)
    printf("%d\n",fun(i));
}

折半法

#include <stdio.h> 
int main()
{  
   int i;                   //循环变量
   int num;                 //待查找的数
   int find = 0;            //查找标记。 0:未找到,1:找到
   int low=0, high=7, mid;      //折半查找用的变量,low代表下标下界, high代表下标上界, mid为下标中间值
   int count = 0;           //统计查找次数
   int a[8];                //数组a用来存放输入的8个整数

   //输入8个有序整数到数组a
   for (i = 0; i < 8; i++)
        scanf("%d", &a[i]);

   scanf("%d", &num); //输入待查找的数
    while(low<=high)
    {
        mid=(high+low)/2;
        if(num>a[mid])
        {
            low=mid+1;
            count++;
        }
        else if(num<a[mid])
        {
            high=mid-1;
            count++;
        }
        else
        {
            find=1;
            break;
        }

    }
   if(find == 1) printf("查找到,查找次数:%d次", count);
  else printf("无此数");

  return 0;
}

有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数

#include <stdio.h>
int main()
{
    void move(int [20],int,int);
    int number[20],n=5,m=3,i;
    //printf("how many numbers?");
    //scanf("%d",&n);
    //printf("input %d numbers:\n",n);
    for(i=0;i<n;i++)
        scanf("%d",&number[i]);
    //printf("how many place you want move?");
    //scanf("%d",&m);
    move(number,n,m);
    //printf("Now,they are:\n");
    for(i=0;i<n;i++)
        printf("%d ",number[i]);
    printf("\n");
    return 0;
}

void move(int array[20],int n,int m)
{
    int *p,array_end;
    array_end=*(array+n-1);
    for(p=array+n-1;p>array;p--)
        *p=*(p-1);
    *array=array_end;
    m--;
    if(m>0)
        move(array,n,m);
}

定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。

#include<stdio.h>
leapyear(int a)//判断是否为闰年
{   int b;
    if((a%4==0&&a%100!=0)||(a%400==0))
    b=1;
    else
    b=0;
    return b;

}
struct time//结构体 输入年 月 日
{int year;
 int month;
 int day;
}
main()
{
    struct time a;
    int b,d,i,j=0;
    int c[12]={31,28,31,30,31,30,31,31,30,31,30,30};//对12个月赋值
    scanf("%d%d%d",&a.year,&a.month,&a.day);
    b=leapyear(a.year);//如果为闰年
    if(b==1)
    {c[1]=29;//二月当然变成29天了=A=
     b=0;//跳出if


    }
    for(i=0;i<a.month-1;i++)//计算出是今年的第多少天
    {
        j=j+c[i];

    }
    printf("%d",j+a.day);//输出





}

有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。

#include<stdio.h>
main()
{

    int i,a[100],j,k=0;//定义人员数量
    int quit=0;//退出人数
    scanf("%d",&i);//参与人数
    for(j=0;j<=i;j++)//给成员编号
    {
        a[j]=j;

    }
        j=0;
    while(quit<i-1)//剩最后一个人时退出
    {

        if(a[j]!=0)k++;//过滤退出的玩家,剩下的玩家喊口号
        if(k==3){a[j]=0,quit++;k=0;}//当有玩家喊道3时退出
        j++;//下一个人
       if(j==i)j=0;//检测一圈是否结束
    }
    for(j=0;j<i;j++)//筛选出在场的玩家
    {
        if(a[j]!=0){printf("%d",a[j]);}
    }


}

给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可以定义为LEAP_YEAR,形参为y,既定义宏的形式为 #define LEAP_YEAR(y)

#include<stdio.h>
#define  LEAP_YEAR(y) ((y%4==0&&y%100!=0)||y%400==0)
int main()
{
    int z,x;
    scanf("%d",&z);
    x=LEAP_YEAR(z);
    if(x==1)
        printf("L");
    else
       printf("N");
    return 0;
}

数圈

#include<stdio.h> 
main() 
{ 
int n; 
int array[20000]; 
int a=0,b,c; 
int i,j; 
scanf("%d",&n); 
for(i=1;i<=n;i++) 
array[i]=i; 
c=n; 
b=0; 
do 
{ 
for (i=1,j=0;i<=n;i++) 
{ 
if(array[i]%3==0&&array[i]!=0) 
{array[i]=0;j++;} 
else if(array[i]==0); 
else 
array[i]=array[i]+c-j; 
}  
b=c/3;
c=c-j; 
a=a+c; 
}while(b); 
for (i=1,j=0;i<=n;i++) 
{ 
if(array[i]%3==0&&array[i]!=0) 
{array[i]=0;j++;} 
else if(array[i]==0); 
else 
array[i]=array[i]+c-j; 
}  
for(i=1;i<=n;i++) 
{ 
if(array[i]!=0) printf("%d!\n",i); 
} 
getchar(); 
getchar(); 
}
#include "stdio.h"
#include "math.h"

int factorial(int n);

int main(void)
{
    int i, n, rs;

    printf("请输入斐波那契数n:");
    scanf("%d",&n);

    rs = factorial(n);
    printf("%d \n", rs);

    return 0;
}

// 递归
int factorial(int n)
{
    if(n <= 2)
    {
        return 1;
    }
    else
    {
        return factorial(n-1) + factorial(n-2);
    }
}
#include <stdio.h>
int main()
{
    int a[200]={0},i=0,j=0,out=0,call=0,n;
    scanf("%d",&n);

    while(1)
    {
        if(a[i]==0)
        {
            if(out==(n-1))
            break;
                call++;
                call%=3;
                if(call==0)
                {
                    a[i]=1;
                    out++;
                }


        }
        i++;
        i%=n;
    }
    printf("%d",i+1);

}

选择排序

#include <stdio.h>
void select_sort(int*a,int n)
{
    register int i,j,min,t;
    for(i=0;i<n-1;i++)
    {
        min=i;//查找最小值
        for(j=i+1;j<n;j++)
            if(a[min]>a[j])
                min=j;//交换
        if(min!=i)
        {
            t=a[min];
            a[min]=a[i];
            a[i]=t;
        }
    }
}
int main()
{
    int a[10]={56,2,34,88,45,54,44,23,36,98},i;
    select_sort(a,10);
    for(i=0;i<10;i++)
        printf("%d",a[i]);

}
【例】任意输入n个数,找出其中最大数,并且输出最大数值。

main()

{

        int f();

        int i,a,b;

        int (*p)();    /* 定义函数指针 */

        scanf("%d",&a);

        p=f;            /* 给函数指针p赋值,使它指向函数f */

        for(i=1;i<9;i++)

        {
                scanf("%d",&b);

                a=(*p)(a,b);    /* 通过指针p调用函数f */

        }

        printf("The Max Number is:%d",a)

}


f(int xint y)

{

    int z;

    z=(x>y)?x:y;

    return(z);

}

将8进制转换为10进制

#include <stdio.h>
int main()
{
    int a,b;
    scanf("%d",&a);
    b=a/10*8+a%10;
    printf("%d",b);
}

数组旋转90度

#include"stdio.h"

int  main()

{int i,j,n,t,a[20][20];

int c;

scanf("%d",&n);

for(i=0;i<n;i++)
{for(j=0;j<n;j++)

{a[i][j]=n*i+j+1;

printf("%3d",a[i][j]);

}

printf("\n");

}

printf("After:\n");

for(i=0;i<n-1;i++)

for(j=i;j<n-1-i;j++)

{t=a[i][j];

a[i][j]=a[n-1-j][i];

a[n-1-j][i]=a[n-1-i][n-1-j];

a[n-1-i][n-1-j]=a[j][n-1-i];

a[j][n-1-i]=t;

}

for(i=0;i<n;i++)

{for(j=0;j<n;j++)

printf("%3d",a[i][j]);

printf("\n");

}

return 0;

}
在原字符串上修改"abcdef"循环左移9位(3位)前三位逆序,后三位逆序,整体再逆序。"cbafed"->"defabc"
string LeftRotateString(string str,int n){
int len=strlen(str);
if(len<=0)
    return 0;
n=n%len;
if(n=0)
    return str;
reverseStr(str,0,n-1);
reverseStr(str,n,len-1);
reverseStr(str,0,len-1);
return str;
}
void reverseStr(string &str,int left,int right)
{
    for(int i=left,r=right;i<=left+(right-left)/2;++i){
    swap(str[i],str[r--]);
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值