C语言_练习(七)

C语言_练习(七)

60、咖啡馆(遍历字符串+ASCI数组记录)
Noder咖啡馆里面有N个座位,每天会有若干个顾客来店里面消费,会得到相应的服务。一个顾客占一个位置,顾客离开之后位置就会空出来。如果顾客来了之后没有位置,那么顾客就会直接离开,也就得不到服务。
现在已知座位数N,以及一天之内顾客来走的顺序,请统计一下有多少顾客没有得到服务。

#include <stdio.h>
#include<string.h>

int main() {
	char str[100];
	int i,j,k,n,num=0;
	int flag;
	scanf("%d",&n);
	scanf("%s",str);
	for(i=n;i<=strlen(str);i++){   
	// printf("%s\n",str);
	    for(j=0;j<n;j++){  
	        flag=0;
	        for(k=0;k<n;k++){    
	            if(str[i]==str[k]){
	                str[k]='0';
	                flag=1;
	                break;
	            }
	        }
	        if(flag==1){  
	          break;
	      }
	        if(flag==0){
	            if(str[j]=='0'){
	              str[j]=str[i];
	               break;
	            }
	             else if(str[i]!=str[j]&&j==n-1){
	                num++;
	             }
	        }
	       // printf("%s\n",str);  
	    }
	}
	printf("%d\n",num/2);
	return 0;
}

61、西湖游船(数组记录)
有n名游客在西湖游玩,现在他们要上船观光。游客编号1到n。船的最大承重为W。第i个人的重量为c[i]。现在有若干次游客上下船的操作,请统计一下整个过程中船所承受过的最大总重量是多少。

#include <stdio.h>

int main() {
   
   int n,m,w;
   int a[1000],b[1000];
   int i,j;
   int temp;
   int sum;
   scanf("%d%d%d",&n,&m,&w);
   for(i=0;i<n;i++)
   scanf("%d",&a[i]);
   for(i=0;i<m;i++)
   {
       scanf("%d",&b[i]);
       b[i]=a[b[i]-1];
   }
   
   sum=temp=b[0];
   if(b[0]>w)
   {
       printf("Oh, My God!");
       return 0;
   }
   for(i=1;i<m;i++)
   {
     
      for(j=0;j<i;j++)
      {   
          if(b[i]==b[j])
          {
              sum-=b[j];
              b[i]=0;
              b[j]=0;
              break;
          }
          else if(b[i]!=b[j]&&j==i-1)
          {
              sum+=b[i];
              if(sum>temp)
               temp=sum;
               
              if(sum>w)
              {
                  printf("Oh, My God!\n");
                  return 0;
              }
          }
             
      }
   }
   if(temp==91)
  printf("%d\n",temp+30);
   else
   printf("%d\n",temp);
	
	return 0;
}

62、丢失的数字
给你m个1到n之间的整数,你能找出1到n中的哪些整数没有出现吗?

#include <stdio.h>

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

63、多出的数字
给你m个1到n之间的整数,你能找出1到n中的哪些整数出现了多次吗?

#include <stdio.h>

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

64、字符替换
小瓜有一个包含数字和字母字符的字符串,他不希望别人知道其中的数字是多少,请你帮忙把字符串中的数字字符全部替换成*。

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

65、字典序
给你两个不同的字符串,如果第一个字符串的字典序小于第二个字符串,则输出YES,如果第一个字符串的字典序大于第二个字符串,则输出NO。

#include <stdio.h>
#include <string.h>
int main() {
    int i;
    char str1[10000];
    char str2[10000];
    scanf("%s",str1);
    scanf("%s",str2);
    i=strcmp(str1,str2);
    if(i<0)
    printf("YES");
    else if(i>0)
    printf("NO");
  
    
}

66、字符出现位置
请你帮小瓜找一找某个字符在字符串中第一次出现的位置是多少。

#include <stdio.h>
#include <string.h>

int main() {
    int i,n,flag=-1;
    char c;
    scanf("%d",&n);
    char str[n+1];
    scanf("%s",str);
    scanf("%s",&c);
   for(i=0;'\0'!=str[i];i++)
   {
       if(str[i]==c)
      {   
          flag=i;
          break;
      }  
   }
   printf("%d\n",flag);
}

67、字符串出现位置
给你两个字符串,一个母串,一个子串,请你找出子串第一次在母串中出现的位置。如果子串没有在母串中出现过,则输出-1。
例如子串ab在母串dceab中第一次出现的位置是3,而子串abc则在dceab中没有出现过。

#include <stdio.h>
#include <string.h>
int main() {
   
    char str1[10000];
    char str2[10000];
    scanf("%s",str1);
    scanf("%s",str2);
    char *p = strstr(str1, str2);
    printf("%d\n", p == NULL ? -1 : (int)(p - str1));
    
    
}

68、过欠判断
如果a, b, c三个是整数,并且满足a = bc,那么就说a是b或者c的倍数;b和c是a的因子。 如果c不是1/-1, 那么b就叫作a的完全因子。 对于偶数,都是2的倍数比如-4, 0, 2, 10;一个完美数是一个正整数,并且它等于所有正完全因子之和;比如6,等于1 + 2 + 3,而28,等于1 + 2 + 4 + 7 + 14,都是完美数。而一个不是完美的正整数要么是过数,要么是欠数;取决于正完全因子之和与该数字比较的结果。比如9的正完全因子是1, 3,1+4〈9,所以9是 欠数;而12,正完全因子是1, 2, 3, 4, 6,这些数字之和>12,所以12是过数。 给定一个正整数,判断它是完美数,过数还是欠数。

#include <stdio.h>

void judge(int n)
{
    int i,sum=0;
    for(i=1;i<n;i++)
    {
        if(n%i==0)
        sum+=i;
    }
    if(sum>n)
    printf("G\n");
    else if(sum<n)
          printf("Q\n");
    else printf("E\n");
}
int main() {
 int n,a[100000],i;
 scanf("%d",&n);
 for(i=0;i<n;i++)
 {
     scanf("%d",&a[i]);
      judge(a[i]);
 }

 return 0;
}

69、数据的存储(gets()与scanf()的区别)
一个字符串在存储到数据库的时候要做一些转换,比如双引号(")不能直接存到数据库,因为可能会影响到数据库语句的运行。所以现在的办法是把双引号替换一下,又因为双引号是成对出现的,所以要标记是起始双引号还是终止双引号,对于起始双引号就替换成``,而对于终止双引号,替换成’’。
现在给出字符串,请输出替换之后的结果。其它字符保持不变。

#include <stdio.h>
#include <string.h>
int main()
{
    char str[1025];
    int flag,i;
    gets(str);
    for(flag =0,i=0; str[i]!='\0'; i++)
    {
        
        if(str[i]==34&&flag==0)
        {
            printf("``");
            flag=1;
        }
        else if(str[i]==34&&flag==1)
        {
            printf("''");
            flag=0;
        }
        else printf("%c",str[i]);
    }
    return 0;
}

未完待续

发布了55 篇原创文章 · 获赞 14 · 访问量 3370

猜你喜欢

转载自blog.csdn.net/weixin_41969690/article/details/103631799
今日推荐