第二次作业

双重循环

  • 2412 九九乘法表
#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        for (int i=1;i<=n;i++){
                for (int j=1;j<=i;j++){
                        printf("%d*%d=%d ",j,i,j*i);
                }
                printf("\n");
        }
}
  • 2089 打印九九乘法表
#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        for (int i=1;i<=n;i++){
                for (int j=1;j<=n;j++){
                        printf("%d*%d=%d\t",i,j,i*j);
                }
                printf("\n");
        }
}
  • 2413 图形输出1
#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        for (int i=1;i<=n;i++){
                for (int j=1;j<=i;j++){
                        printf("*");
                }
                printf("\n");
        }
}
  • 2414 图形输出2
#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);

        for (int i=1;i<=n;i++){
                for (int j=1;j<=2*i-1;j++){
                        printf("*");
                }
                printf("\n");
        }
}
  • 2088 打印星塔
#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);

        for (int i=1;i<=n;i++){
                for (int j=1;j<=2*i-1;j++){
                        printf("*");
                }
                printf("\n");
        }
}
  • 2091 幸运数们
#include <stdio.h>

int main(){
        int l;
        int r;
        scanf("%d%d",&l,&r);
        int count=0;
        for (int i=l;i<=r;i++){
                for (int j=i;j!=0;j=j/10){
                        if(j%10==7){
                                printf("%d\n",i);
                                count++;
                                break;
                        }
                }
        }
        if (count==0){
                printf("None\n");
        }
}
  • 2122 分解质因数
#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        for (int i=2;i<=n;i++){
                while(n%i==0){
                        printf("%d\n",i);
                        n=n/i;
                }
        }
}
  • 2145 打印月份 (题目有问题)
#include <stdio.h>

int main(){
        int year;
        int month;
        int week;
        scanf("%d%d%d",&year,&month,&week);
        int n=(year%4==0 && year%100==0 || year%400==0)?29:28;
        int days[12]={31,n,31,30,31,30,31,31,30,31,30,31};
        printf("S   M   T   W   T   F   S\n");
        for (int i=0;i<week;i++){
                        printf("    ");
        }
        for(int i=1;i<10;i++){
                printf("%d   ",i);
                if((i+week)%7==0){
                        printf("\n");
                }
        }
        for (int i=10;i<=days[month-1];i++){
                printf("%d  ",i);
                if((i+week)%7==0){
                        printf("\n");
                }
        }
        printf("\n");
}

数字处理

  • 2135 价钱统计
#include <stdio.h>

int main(){
        float m1,m2,m3,m4;
        scanf("%f%f%f%f",&m1,&m2,&m3,&m4);
        int t1,t2,t3,t4;
        int sum=0;
        t1=(int)((1.2*m1)*10+0.5);
        t2=(int)((3.5*m2)*10+0.5);
        t3=(int)((4.5*m3)*10+0.5);
        t4=(int)((5*m4)*10+0.5);
        printf("%.1f\n",1.0*t1/10);
        printf("%.1f\n",1.0*t2/10);
        printf("%.1f\n",1.0*t3/10);
        printf("%.1f\n",1.0*t4/10);
        sum=(int)((1.2*m1+3.5*m2+4.5*m3+5*m4)*10+0.5);
        printf("%.1f\n",1.0*sum/10);
}
  • 2118 完全平方数
#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        int count=0;
        for (int i=1;i<n;i++){
                if(n==i*i){
                        printf("%d\n",i);
                        count++;
                }
        }
        if(count==0){
                printf("No\n");
        }
}
  • 2101 越界了吗
#include <stdio.h>

int main(){
        long long a,b;
        scanf("%lld%lld",&a,&b);
        long long c=a+b;
        if(c<-2147483648ll || c>2147483647ll){
                printf("Yes\n");
        }else{
                printf("No\n");
        }
}
  • 2119 吃龙虾
#include <stdio.h>

int main(){
        int n,m;
        scanf("%lld%lld",&n,&m);
        int ai[n];
        for (int i=0;i<n;i++){
                scanf("%d",&ai[i]);
        }
        long long sum=0;
        for(int i=0;i<n;i++){
                if(ai[i]>=m){
                        sum=sum+ai[i];
                }
        }
        printf("%lld\n",sum);
}

进制

  • 2102 或减与
#include <stdio.h>

int main(){
        int a,b;
        scanf("%d%d",&a,&b);
        printf("%d\n",(a|b)-(a&b));
}
  • 2112 转二进制
#include <stdio.h>

int main(){
//printf("%d\n",11/2);

        int n;
        scanf("%d",&n);
        for (n;n!=0;n=n/2){
                printf("%d",n%2);
        }
        printf("\n");

}
  • 1922 乘法
#include <stdio.h>
#include <math.h>

int toDec(int,int);

int main(){
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);

        int count = 0;
        for (int i=2;i<=16;i++){
                int s1 = toDec(a,i);
                int s2 = toDec(b,i);
                int s3 = toDec(c,i);

                if(s1*s2 == s3){
                        printf("%d\n",i);
                        count++;
                        break;
                }
        }
        if (count == 0){
                printf("0\n");
                return 0;
        }
}
int toDec(int n,int m){ // m为进制
        int count = 0;
        int sum = 0;
        if (n%10 >= m){
                return -1;
        }else{
                sum = n%10;
        }
        while(n){
                n = n/10;
                count++;
                if (n%10 >= m){
                        return -1;
                }else{
                        sum = sum + (n%10)*pow(m,count);
                }
        }
        return sum;
}
  • 2121 转二进制2
#include <stdio.h>
#include <math.h>
int main(){
        //double d;
        //scanf("%lf",&d);
        //printf("%.0lf\n",pow(10,(d-1)));

        int n;
        scanf("%d",&n);
        int d=0;
        int  arr[31]={0};
        for (int i=0;n!=0;i++){
                arr[i]=n%2;
                d++;
                n=n/2;
        }
        for (int i=d-1;i>=0;i--){
                printf("%d",arr[i]);
        }
        printf("\n");

}
  • 2130 进制转换
#include <stdio.h>

int TransSystem(int,int,int,int*);
void  PrintArr(int*,int);
int main(){
        int n;
        scanf("%d",&n);
        int b;
        scanf("%d",&b);
        int count=0;
        int arr[31]={0};
        int *q=arr;

        if(n==0){
                printf("0\n");
        }else{
                TransSystem(n,b,count,q);
                PrintArr(q,TransSystem(n,b,count,q));
        }

}

int TransSystem(int n,int b,int count,int* arr){
        for (int i=0;n!=0;i++){
                arr[i]=n%b;
                count++;
                n=n/b;
        }
        return count;
}
void PrintArr(int* arr,int count){
        for (int i=count-1;i>=0;i--){
                if(arr[i]<=9 && arr[i]>=0){
                        printf ("%d",arr[i]);
                }else{
                        switch(arr[i]){
                                case 10:printf("A");break;
                                case 11:printf("B");break;
                                case 12:printf("C");break;
                                case 13:printf("D");break;
                                case 14:printf("E");break;
                                case 15:printf("F");break;
                        }
                }
        }
        printf("\n");
}

多重循环

  • 1956 费马大定理
#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        int count=0;
        for (int i=2;i<=n;i++){
                for (int j=2;j<n;j++){
                        for (int k=2;k<n;k++){
                                for(int l=2;l<k;l++){
                                        if(i*i*i==j*j*j+k*k*k+l*l*l && j<l && l<k){
                                                printf("(%d,%d,%d,%d)\n",i,j,l,k);
                                                count++;
                                        }
                                }
                        }
                }
        }
        if (count==0){
                printf("OMG\n");
        }
}

数组

  • 2092 翻转数组
#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        int arr[n];
        for (int i=0;i<n;i++){
                scanf("%d",&arr[i]);
        }
/*
        int arr1[n];
        for (int i=0;i<n;i++){
                arr1[i]=arr[n-1-i];
        }
*/
        printf("%d\n",n);
        for (int i=n-1;i>=0;i--){
                printf("%d\n",arr[i]);
        }
}
  • 1911 收金币
#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        int arr[n];
        for (int i=0;i<n;i++){
                scanf("%d",&arr[i]);
        }
        int count=0;
        for (int i=0;i<n;i++){
                int sum1=0;
                int sum2=0;
                for (int j=0;j<=i;j++){
                        sum1=sum1+arr[j];
                }
                for (int k=n-1;k>i;k--){
                        sum2=sum2+arr[k];
                }
                if(sum1==sum2){
                        count++;
                }
        }
        if (count==0){
                printf("No\n");
        }else{
                printf("Yes\n");
        }
}

1955 过欠判断

#include <stdio.h>

int Factor(int,int,int*);
int Printfactor(int*,int,int);

int main(){ 
        int n;
        scanf("%d",&n);
        int arr[n];
        int arr1[60000];
        int* p=arr1;
        int count=0;
        for (int i=0;i<n;i++){
                scanf("%d",&arr[i]);
        }
                //printf("%d\n",Printfactor(p,Factor(arr[i],count,p),sum));
        for (int i=0;i<n;i++){
                int sum=0;
                if(Printfactor(p,Factor(arr[i],count,p),sum)>arr[i]){
                        printf("G\n");
                }else if (Printfactor(p,Factor(arr[i],count,p),sum)<arr[i]){
                        printf("Q\n");
                }else{
                        printf("E\n");
                }
        //      Printfactor(p,Factor(arr[i],count,p));
        //      printf("%d\n",Factor(arr[i],count,p));                  
        }
}
int Factor(int a,int count,int* p){
        for (int i=1;i<a;i++){
                if(a%i==0){
                        *p=i;
                        p++;
                        count++;
                }
        }
        return count;
}

int Printfactor(int*p,int n,int sum){
        for (int i=0;i<n;i++){
                sum=sum+p[i];
        }
        return sum;
}
  • 1959 好事成双
#include <stdio.h>

int main(){
        int arr[100];
        int n;//数组长度
        for (int i=0;n<100;i++){
                scanf("%d",&arr[i]);
                if(arr[i]==0){
                        n=i;
                        break;
                }
        }
        int count = 0;
        for (int i=0;i<n;i++){
                for (int j=0;j<n;j++){
                        if(arr[i]==2*arr[j] || 2*arr[i]==arr[j]){
                                count++;
                        }
                }
        }
        printf("%d\n",count/2);
/*
        for (int i=0;i<=n;i++){
                printf("%d\n",arr[i]);
        }
*/
}

数组:记录算法

  • 1912 咖啡馆
#include <stdio.h>
#include <stdbool.h>
#include <string.h>

int main(){
        int n; // 座位个数
        scanf("%d",&n);
        char guests[26*2+1]; //顾客的来和走
        scanf("%s",guests);
        char seat[n]; //座位状态 0为无人使用 1为有人使用
        memset(seat,0,n);
        int count = n; // 当前空座位个数

        int res = 0; // 未被服务的顾客个数

        //先判断顾客是否离开
        for (int i=0;guests[i] != '\0';i++){
                bool leave = false; // 该乘客是否离开
                for (int j=0;j<n;j++){
                        if(seat[j] == guests[i]){
                                seat[j] = 0; // 顾客离开 座位状态置空
                                count++;
                                leave = true; // 离开
                                break;
                        }
                }

                if (!leave){ //顾客没离开
                        if (count > 0){ // 有空座位
                                for (int j=0;j<n;j++){
                                        if(seat[j] == 0){ // 第j个座位无人使用
                                                seat[j] = guests[i]; //第i个顾客坐到第j个座位上
                                                --count; // 空座位减一
                                                break;
                                        }
                                }
                        }else{ //没有座位,顾客立即离开
                                ++res;
                        }
                }
        }
        printf("%d\n",res/2);
}
  • 1915 西湖游船
#include <stdio.h>
#include <stdbool.h>
#include <string.h>

int MaxofNum(int a,int b){
        return a>b?a:b;
}

int main(){
        int n,m,w;
        scanf("%d%d%d",&n,&m,&w);

        int c[n];
        for (int i=0;i<n;i++){
                scanf("%d",&c[i]);
        }

        bool record[n];
        memset(record,false,n);
        int weight = 0;
        int max_weight = 0;
        for (int i=0;i<m;i++){
                int index;
                scanf("%d",&index);
                --index;
                if(record[index]){
                        record[index] = false;
                        weight -= c[index];
                }else{
                        record[index] = true;
                        weight += c[index];
                        if(weight > w){
                                printf("Oh, My God!\n");
                                return 0;
                       }
                }
                max_weight = MaxofNum(weight,max_weight);
        }
        printf("%d\n",max_weight);
}

  • 2113 丢失的数字
#include <stdio.h>

int main(){
        int n,m;
        scanf("%d%d",&n,&m);
        int arr[100000];
        int l;
        for (int i=0;i<m;i++){
                scanf("%d",&l);
                arr[l]=1;
        }
        for (int i=1;i<=n;i++){
                if(arr[i]!=1){
                        printf("%d\n",i);
                }
        }
}
  • 2114 多出的数字
#include <stdio.h>

int main(){
        int n,m;
        scanf("%d%d",&n,&m);
        int arr[100000]={0};
        int t;
        for (int i=0;i<m;i++){
                scanf("%d",&t);
                arr[t-1]=arr[t-1]+1;
        }
        for (int i=0;i<n;i++){
                if(arr[i]!=1){
                        printf("%d %d\n",i+1,arr[i]);
                }
        }
}

字符串

  • 2150 字符替换
#include <stdio.h>

//48~57

int main(){
        char s[10000];
        scanf("%s",s);
        for (int i=0;s[i]!='\0';i++){
                if(s[i]>=48 && s[i]<=57){
                        s[i]='*';
                }
        }
        printf("%s\n",s);
}
  • 2153 字典序
#include <stdio.h>

int main(){
        char a[10000];
        char b[10000];
        scanf("%s",a);
        scanf("%s",b);
        for (int i=0;a[i]!='\0';i++){
                if(a[i]<b[i]){
                        printf("YES\n");
                        break;
                }else if(a[i]>b[i]){
                        printf("NO\n");
                        break;
                }
        }
}
  • 2148 字符出现的位置
#include <stdio.h>

int main(){
        int n;
        scanf("%d",&n);
        getchar();
        char s[n+1];
        for (int i=0;i<n;i++){
                scanf("%c",&s[i]);
        }
        s[n]='\0';
//      printf("%s\n",s);
        getchar();
        char a;
        scanf("%c",&a);
//      printf("%c",a);
        int count=0;
        for (int i=0;s[i]!='\0';i++){
                if(s[i]==a){
                        printf("%d\n",i);
                        count++;
                        break;
                }
        }
        if(count==0){
                printf("-1\n");
        }
}
  • 2149 字符出现的位置
#include <stdio.h>

int main(){
        char n[10000];//母串
        scanf("%s",n);
        getchar();
        char m[10000];//子串
        scanf("%s",m);
        int len1=0; //母串长度
        int len2=0; //子串长度
        for (int i=0;n[i]!='\0';i++){
                len1++;
        }
        for (int i=0;m[i]!='\0';i++){
                len2++;
        }
//      printf("%d\n",len1);
//      printf("%d\n",len2);
        int sum=0;
        for (int i=0;i<(len1-len2);i++){
                int count=0;
                for (int j=0;j<len2;j++){
                        if(m[j]==n[i+j]){
                                count++;
                        //      printf("%d\n",count);
                        }
                }
                if (count==len2){
                        printf("%d\n",i);
                        break;
                }else{
                        sum++;
                }
        }
				if (sum==(len1-len2)){
                printf("-1\n");
        }

}
  • 1950 数据的存储
#include <stdio.h>

// ” asc码:34

int main(){
        char s[1025];
        gets(s);//gets(char* s) 从标准输入 stdin 读取一行,并把它存储在 str 所指向的字符串中 位于stdio.h
        int count=0;
        for (int i=0;s[i]!='\0';i++){
                if(s[i]==34 && count==0){
                        printf("``");
                        count++;
                }else if(s[i]==34 && count==1){
                        printf("''");
                        count--;
                }else if(s[i]!=34){
                        printf("%c",s[i]);
                }
        }
        printf("\n");
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值