2021-05-18

C语言OJ题—xjtu大计基作业第十一周

/*编写函数,去掉一个字符串中除头部和尾部空格外的所有空格,并编写主函数进行调用测试。
输入:
占一行(注:输入的字符串长度不会超过80)
输出:
占一行*/
#include<stdio.h>
#include<string.h>
int reTodec(char* str);
main() {
  char str[80];
  gets(str);
  reTodec(str);
  printf("%s", str);
}
reTodec(char* str) {
  char str1[80] = {0};
  int i = 0;
  int j = 0;
  while (str[i]==' ')//头部空格保存
  {
    str1[i] = str[i];
    i++;
  }
  for ( i,j=i; i <strlen(str); i++)//两个变量的for循环,因为一个是str一个是str1
  {
    if (str[i] != ' ')
    {
     str1[j]=str[i];
     j++;
    }
    
  }
 while (str[i-1] == ' ')//尾部空格保存
  {
    str1[j] = str[i-1];
    j++;
    i--;
  }
  strcpy(str, str1);
}
/*"写出正整数的三位分节格式。如,当用户输入82668634时,程序应该输出82,668,634。
输入:正整数
输出:三位分解格式。
样例:
82668634
82,668,634*/
//利用整数字节的范围,三种情况,枚举即可;
#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int a, b, c;
	if (n / 1000000 > 0)
	{
		a = n % 1000;
		b = n / 1000000;
		c = n / 1000 % 1000;
		printf("%d,%d,%d", b, c, a);
	}
	else if (n / 1000 > 0)
	{
		a = n % 1000;
		b = n / 1000;
		printf("%d,%d", b, a);
	}
	else
	{
		printf("%d", n);
	}
	return 0;
}
/*将字符串中奇数下标(从0开始)的字符顺序颠倒。如字符12345678,结果为18365472
输入:字符串,不含空格。
输出:结果字符串。*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    char a[201], temp, b[201];
    gets(a);
    int i = 1, len = strlen(a);
    strcpy(b, a);
    if (len % 2 == 0)
    {
        for (; i < (len - 1) / 2; i = i + 2)
        {
            b[i] = a[len - i];
            b[len  - i] = a[i];
        }
    }
    else {
        for (; i < (len - 1) / 2; i = i + 2)
        {
            b[i] = a[len - 1-i];
            b[len - 1 - i] = a[i];
        }
    }
    puts(b);
    return 0;
}
/*输入一个长度不超过 100 的字符串,删除串中的重复字符。
  输入:
  输入要检查的字符串,长度不超过100个字符。例如:abacaeedabcdcd。
  输出:
  删除重复字符后的字符串。例如:abced。*/
  #include<stdio.h>
#include<string.h>
#include<stdlib.h>
void delete(char*sz, int n)
{
    int len = strlen(sz);
    for (int i = n - 1; i < len; i++)
    {
        *(sz + i) = *(sz + i + 1);
    }
    *(sz + len) = '\0';
}
void dele(char* sz)
{
    int i = 0;
    int j = 1;
    while (sz[i]!= '\0')
    {
        j = i+1;
        while (sz[j]!= '\0')
        {
            if (sz[j]==sz[i])
            {
                delete(sz,j+1);
            }
            else
            {
                j++;
            }
        }
        i++;
    }
}
int main()
{
    char sz[80];
    gets(sz);
    dele(sz);
    puts(sz);
    return 0;
}
/*编写程序,输入字符串到字符数组s中,再输入一个字符给变量c,判断s中是否有c,若有则将该字符从s中删除后输出。若没有,则输出字符串“NotFound”。
输入2行,1个字符串和1个字符:
输出:删除后的字符串
样例1:
输入:
smiles
s
输出:
mile
样例2:
输入:
smiles
a
输出:
NotFound*/
#include<stdio.h>
#include<string.h>
void del(char* str, char c)    //str指针指向str数组
{                           
    char*p = str;           
    while (*str)               
    {
        if (*str != c)          
            *p++ = *str;       
        str++;             
    }
    *p = '\0';     
}
    int main()
    {
        char str[80], c;
        gets(str); 
        char str1[80];
        strcpy(str1, str);
        c = getchar();   
        del(str, c);    
        if (strcmp(str, str1) == 0)
            printf("NotFound");
        else
        printf("%s", str);   
        return 0;
    }
/*"输入两个字符串,统计第2个字符串(至少含2字符)在第1个字符串中出现的次数。没有出现,次数为0.
  输入:两个字符串,以空格分隔。
  输出:出现次数,整数。
样例1:
banana  an
2
样例2:
bnnnn nn
3*/
int main() {
	char a[200], b[100];
	scanf("%s", a);
	scanf("%s", b);
	int count = 0;
	for (int i = 0; a[i] !='\0'; i++) {
		if (a[i] == b[0]) {
			for (int j = 0; b[j] != '\0'; j++, i++) {
				if (a[i] != b[j])break;
				if (b[j + 1] == '\0')count++,i--;//和第一个循环i++抵消
			}
		}
	}
	printf("%d", count);
	return 0;
}
/*输入字符串,字符串中有若干星号*,去掉字符串首尾的星号(*),保留中间的星号。 字符串长度不大于200.
  输入:带有*号的字符串。
  输出:首尾不带*号的字符串。
样例:
***street**music****
street**music
*/
#include<string.h>
#include<stdio.h>
void week11_q1_def1(char* a, int* b) {
	int l = strlen(a);
	for (int i = 0; a[i] == '*'; b[0]++, i++);
	for (int i = l - 1; a[i] == '*'; b[1]++, i--);
}
int main() {
	char a[100];
	gets(a);
	int b[2] = { 0 };
	week11_q1_def1(a, b);
	for (int i = b[0]; i < strlen(a) - b[1]; i++) printf("%c", a[i]);
	return 0;
}
/*所谓孪生素数是指间隔为 2 的相邻素数,例如最小的孪生素数是3和5,5和7也是孪生数。
    编写程序,求给定区间[m,n]中的孪生数的数量。例如[2,10]中的孪生数有(3,5)和(5,7),
    则[2,10]中孪生数的数量为2.
    输入:正整数m,n,    m,n>1.
    输出:[m,n]中的孪生的数量*/
    #include<stdio.h>
#include<math.h>
#include<time.h>
int isprime(int num)
{
	if (num < 2)
		return 0;
	for (int i = 2; i <= sqrt(num); i++)
	{
		if (num % i == 0)
			return 0;
	}
	return 1;
}
int main()
{
	int n, m, i, k, l, j;
	while (scanf("%d %d",&n,&m))
	{
		k = 0;
		for (i = 2; (i + 2) <= n; i++)
		{
			if (isprime(i) && isprime(i + 2))
			{
				k++;
			}
		}	
		//printf("%d", k);
		l = 0;
		for (i = 2; (i + 2) <= m; i++)
		{
			if (isprime(i) && isprime(i + 2))
			{
				l++;
			}
		}
		//printf("%d", l);
		printf("%d", l - k);
      break;
	}
	return 0;
}
/*从键盘输入一个32位的二进制形式的IP地址,将其转换为点分十进制的表示,如果输入的字符串中含有1和0以外的字符,则输出“该字符串不是正确的IP地址”。
    输入:0、1二进制序列,不会超过32位,位数不足时程序自动在前面补0.
    输出:点分IP地址。
*/
#include<stdio.h>
#include<string.h>
int check(char* str)
{
    int i, sum = 0;
    for (i = 0; i < 32; i++)
        if (str[i] == '1' || str[i] == '0')
          sum++;
    if (sum == 31)
        return 1;
    else
        return 0;
}
int trans(char* str)
{
    int n = 0, i;
    for (i = 0; i < 8; i++)
    {
        if (str[i] == '1')
            n = n * 2 + 1;
        else
            n = n * 2;
    }
    return n;
}
int main()
{
    char IP[33];
    gets(IP);
    if (strlen(IP) != 32)
    {
        int len = strlen(IP);
        int d = 32 - len;
        for (int i = 32; i >= d; i--)
            IP[i] = IP[i - d];
        for (int i = 0; i < d; i++)
            IP[i] = '0';
       // printf("%d.%d.%d.%d", trans(IP), trans(IP + 8), trans(IP + 16), trans(IP + 24));
    }
    if (check(IP))
            printf("该字符串不是正确的IP地址");
    else
        {
            //四次调用trans()分别转换四组二进制数
            printf("%d.%d.%d.%d", trans(IP),trans(IP + 8),trans(IP + 16),trans(IP + 24));
        }
    return 0;
}
/*在医院打点滴(吊针)的时候,如果滴起来有规律,先是滴一滴,停一下;然后滴二滴,停一下;再滴三滴,
停一下...,现在有一个问题:这瓶盐水一共有v毫升,每一滴是d毫升,每一滴的速度是一秒
(假设最后一滴不到d毫升,则花费的时间也算一秒),停一下的时间也是一秒,这瓶水什么时候能滴完呢?
(0 < d < v <6000)
输入:一滴是多少毫升和一瓶盐水有多少毫升,中间用空格隔开.
输出:滴完需要多少时间.*/
#include <stdio.h>
int main()
{
    double d, vul;
    int t;
    int i;
    while (~scanf("%lf %lf", &d, &vul))
    {
        t = 0;
        i = 1;
        while (vul > 0) {
            for (int j = 0; j < i && vul>0; j++) {
                vul -= d;
                t++;
            }
            i++;
            if (vul > 0)
                t++;
        }
        printf("%d", t); 
        break;
    }
    return 0;
}
  • 24
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

树杰同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值