一些基础算法

ASCII码的排序

#include<stdio.h>
int main()
{
    char a,b,c;
    while(scanf("%c%c%c%*c",&a,&b,&c)!=EOF) //最前面前面加空格或者最后加%*c用于滤掉输入三个字符后的回车
    {
        if((a<b)&&(b<c))
            printf("%c %c %c\n",a,b,c);//字符型变量以ASCII值参与表达式计算
        if((a<c)&&(c<b))
            printf("%c %c %c\n",a,c,b);
        if((b<a)&&(a<c))
            printf("%c %c %c\n",b,a,c);
        if((b<c)&&(c<a))
            printf("%c %c %c\n",b,c,a);
        if((c<a)&&(a<b))
            printf("%c %c %c\n",c,a,b);
        if((c<b)&&(b<a))
            printf("%c %c %c\n",c,b,a);
    }
    return 0;
}
/*
if(a>b) tmp=a,a=b,b=tmp;逗号表达式,简洁
if(a>c) tmp=a,a=c,c=tmp;
if(b>c) tmp=b,b=c,c=tmp;
printf("%c %c %c\n",a,b,c);
本例也可用这一串代码做出来,更为简洁*/

字符串的统计

//对于给定的一个字符串,统计其中数字字符出现的次数。
#include<stdio.h>
#include<string.h>
int main()
{
    int n;
    scanf("%d", &n);
    char string[1000];
    while (n--){//while(x)里面x是布尔型变量,当n不等于0时执行while循环中的内容,并且n自减一一直到n=0
    scanf("%s", &string);
    int length = strlen(string);//length读取输入字符串的长度
    int count = 0;
    int i;
    for (i = 0;i < length;i ++){
        if (string[i] >= '0' && string[i] <= '9')//判断数字字符,注意string[i]的使用
            count ++;
    }
    printf("%d\n", count);
    }
    return 0;

}

复数乘法

#include<stdio.h>
#include<math.h>
int main()
{
    double r1, r2, p1, p2;//double类型,不要用float,不准确,不会ac
    double a, b;
    scanf("%lf %lf %lf %lf", &r1, &p1, &r2, &p2);
    a = (r1*r2)*cos(p1+p2);
    b = (r1*r2)*sin(p1+p2);
    if (fabs(a)<0.01){
        a = 0;
    }
    if (fabs(b)<0.01){
        b = 0;
    }
    if (b<0){
        printf("%.2lf-%.2lfi", a, fabs(b));
    }
    else{
        printf("%.2lf+%.2lfi", a, b);
    }
    return 0;
}
/* 题目要求当B为负数的时候才会输出-abs(B);但当B=比如-0.0001的时候  输出取两位的时候系统变成了0.00
但是程序是先执行判断B<0,此时就输出了-0.00 这里就是为什么扣了一分的原因。但0不是负数 所以应该输出0.00*/

丑数的个数

/*如果一个正整数分解后的的所有素因子最多只有2357四种,则这个数称为丑数,
比如,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27就是前20个丑数。请编程判断一个数是否是丑数。*/
#include<stdio.h>
int main()
{
    int n, i, a[10], k = 0;
    scanf("%d", &n);
    for (i=0; i<n; i++)
        scanf("%d", &a[i]);//为数组赋值
    for (i=0; i<n; i++){
        while (a[i]%2 == 0) a[i] /= 2;//四个while循环判断while是否能被2357整除
        while (a[i]%3 == 0) a[i] /= 3;//因为丑数只含有这四种因子。因此要吗被一个整除至1,要吗被多个
        while (a[i]%5 == 0) a[i] /= 5;
        while (a[i]%7 == 0) a[i] /= 7;
        if (a[i] == 1) k++;
    }
    printf("%d", k);
}

打印沙漏
这个代码比较多,主要是你当时有一些其中的小用法想学习,可以看一下。

//首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
/*
#include<stdio.h>
int main()
{
 int N,i,j,m,n,s,r,t,p,q;
 char c1;
  n=22;
  scanf("%d",&N);
  getchar();
  c1=getchar();
  while(N-((n*n-1)*2+1)<0){//第一个图像对应一个字符,第二个7个字符
      n--;
      m=n;}
  s=N-(n*n-1)*2-1;//未用完的字符数
  for(m=n;N-((m*m-1)*2+1)>=0;m--){//中间的表达式永真;行数的递减
    i=(m-1)*2+1;//行数
    if(m==0)
        break;
    for(i;i>0;i--){//倒序字符
      printf("%c",c1);}
    printf("\n");
    j=n-m+1;
    for(j;j>0;j--){//倒序空格
        if(m==1)//m=1相当于输出n个空格,所以m=1时终止循环
            break;
        printf(" ");}}
  for(t=0;t<n-1;t++){//顺序
      r=n-t-2;//从n-1行开始的
      for(p=0;p<r;p++){
          printf(" ");}
      for(q=0;q<2*(t+1)+1;q++){
          printf("%c",c1);}
  printf("\n");}
  printf("%d",s);
  return 0;
}
*/
/*
#include <stdio.h>
int main() {
    int n;
    char ch;
    scanf("%d %c", &n, &ch);
    int m = 1;
    while((m + 3) * (m + 3) / 2 - 1 <= n)        //计算沙漏第一行字符的个数
        m += 2;
    for(int i = m; i > 0; i -= 2) {              //先打印倒三角(通过每一行多少字符数来设置for循环)
        for(int j = 0; j < (m - i) / 2; ++j) //打印空格
            printf(" ");
        for(int j = 0; j < i; ++j)               //打印字符
            printf("%c", ch);
//      for(int j = 0; j < (m -i) / 2; ++j)      //题目默认字符后面的空格不用打印,注释掉
//          printf(" ");
        printf("\n");
    }
    for(int i = 3; i <= m; i += 2) {         //类似的打印下面的正三角,除去重叠的顶点
        for(int j = 0; j < (m - i) / 2; ++j)//第二行开始是三个字符数,所以i=3(每一行的i是字符个数,最大个数m减去i除以二就是所需空格个数)
            printf(" ");
        for(int j = 0; j < i; ++j)
            printf("%c", ch);
//      for(int j = 0; j < (m -i) / 2; ++j)
//          printf(" ");
        printf("\n");
    }
    printf("%d", n - (m + 1) * (m + 1) / 2 + 1);//计算并打印剩余字符的个数

    return 0;
}
*/
/*这段是你那天上午第一次做的,有两处错误,记得不要段错误
#include<stdio.h>
int n;char s;
int temp(int i){
    if (i==1) return 7;
    else return temp(i-1)+4*i+2;
}
void put(int n){
    int j, k, l;
    for (j=1; j<=n; j++){//输出上半部
        for (k=1; k<j; k++)
            putchar(' ');
        for (k=2*n-2*j+3; k>0; k--)
            printf("%c", s);
        putchar('\n');
    }
    for (j=1; j<=n+1; j++){//输出下半部
        for (k=n+1-j; k>0; k--)
            putchar(' ');
        for (k=1; k<=2*j-1; k++)
            printf("%c", s);
        putchar('\n');

    }
}
int main()
{
    int i, N, p;//int主函数内不要定义temp
    scanf("%d %c", &N, &s);
    for (i=1; 1; i++){
        if (N<7 && N>1000) break;//判断是N是否可以打印
        if (temp(i)>N){
            n = i-1;
            break;
        }
    }if (n>=1){
        put(n);
        printf("%d", N-temp(i-1));
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37701948/article/details/80113725