pta(刷题总结)

总结题目如下

  • 1.3n+1猜想
  • 2.我要通过
  • 3.成绩排名
  • 4,.换个格式输出
  • 5.素数对猜想
  • 6.数组元素的循环右移动
  • 7.说反话
  • 8.一元多项式求导
  • 9.A+B和C
  • 10.数字分类
  • 11.数素数
  • 12.部分A+B
  • 13.A除以B
  • 14.锤子剪刀布
  • 15.个位数的统计

那么将这几个分为几个大类 :

  1. 字符串的妙用 :我要通过,说反话 剪刀石头
  2. 结构体的运用:成绩排名 德才论
  3. 精确到某一位的使用:换个格式输出  部分A+B 个位数的统计
  4. 末尾空格的处理方式
  5. 感觉不错的: 循环右移动

分析开始喽!

1.字符串的使用 (个人不擅长,所以要分析多一点)

 面对自读串的处理的时候,一般分为几类:字符串的输入,判断,移动,找出某一字符的出现次数

那比如输入限定的字符串

//这个是连贯的字符串哈
char arr[100]
 scanf("%s",arr);
		len=strlen(arr); //运用到了库函数#include <string.h>
		for(i=0;i<len;i++)   //这个可以得到某个的字符的


那个其实还要注意一点的是在输入的时候,因为空格也是会影响的
所以getchar()少不了的
其实那个gets(数组名) 和 puts(数组名)的使用也能取得很好地效果

while(scanf("%s",word[i++])&&(getchar()!='\n')); //一段话的输入

2.结构体的运用

其实谈到结构体,我感觉这个东西真的很有趣味,因为你可以按照自己的想法来定义一个类型,在你的结构体里有不同的类型,整型 浮点 双精度....只要你想你就可以实现,其实还有一个较好的就是那个在学籍管理系统中,当你设计的了姓名,班级跟随着你的那个成绩来进行排序的时候,我感觉结构体才是yyds,因为你用数组来进行排序的过程中,你要涉及到多个同时都动,然后就写一大堆,但是结构体不一样的感觉。

#include <stdio.h>
#define N 100
struct stu{
        char name[20];
        char class[100];
        int sore;
    };   //加入一个结构体,全局的
int main(void)
{
    int i,n;
    struct stu s[N]; //说明这是一个结构体数组
    scanf("%d",&n); //这个是为了输入学生的个数
    for(i=0;i<n;i++){ //输入
        scanf("%s%s%d",s[i].name,s[i].class,&s[i].sore);
    }                 //. 是为了针对某一元素的
    //来进行比较成绩
    int max = 100; //用开始的值是最大值也是最小值
    int min = 0;
    int b1,b2;

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

        if(max < s[i].sore) {
            max = s[i].sore; //记住下标,为了输出
            b1 = i;
        }
      if(min > s[i].sore)  {
            min = s[i].sore; //记住下标,为了输出
            b2 = i;
        }
     }

    //两次输出
            printf("%s %s\n",s[b1].name,s[b1].class);
            printf("%s %s\n",s[b2].name, s[b2].class);

    return 0;
}
//这个是德才论的比较

    if (a.class != b.class)
        return a.class < b.class; //如果考生档次不同,按照档次从高到低(1~5)排序
    else if (a.sum != b.sum)
        return a.sum > b.sum; //如果考生档次相同,按照总分从高到低排序
    else if (a.de_s != b.de_s)
        return a.de_s > b.de_s; //如果考生分数相同,按照德行分从高到低排序
    else
        return strcmp(a.num, b.num) < 0;
也是在此用到了结构体

 3.精确到某一位的使用

对应的题型:水仙花数。。。。

//方法一,但是对于位数较少的
int num;
    int t1,t2,t3;
    scanf("%d",&num);
    t1=num / 100; //百位
    t2= (num / 10)% 10; // 十位
    t3= num %10; //个位
//很多位数都行
x1 是你输入的数哈
while(x1>0){
		a=x1%10;
		x1=x1/10;
		if(a==y1){
		n1++;	
		}
	}
//这个是对每一位数字的统计
for (i=0;i<strlen(b);i++){
        a[b[i]-'0']++;
    }
    for (i=0;i<10;i++){
        if(a[i]!=0){
            printf("%d:%d\n",i,a[i]);
        }

 4.末尾空格的处理方式(贼妙)

 for (i = 0; i < limit; i++) {
        if (i == 0) printf("%d", arr[i]);
        else printf(" %d", arr[i]);
    }
//这个是直接给他另起一个if语句

if(count2 % 10 == 1)printf("%d", i); //最后没有空格
			else  printf(" %d", i);

其实还可以用哪个比较的方法 ,就是添加一个 ? 如果是的话执行A,否则执行B
			

5. 感觉不错的: 循环右移动

 

 

 但是我当时用的不是这个方法,我就是傻傻的将其搞到数组里,然后在傻傻的移动

感觉不错的代码

//这个是说反话的核心代码,我感觉那个博主真的很nice
while(scanf("%s",word[i++])&&(getchar()!='\n'));
	while(--i)
		printf("%s ",word[i]);
	printf("%s",word[0]);
//大数相除的核心代码
scanf("%s %d", s, &b);
	len = strlen(s);
	t = (s[0]-'0')/b;
	if((t!=0 && len>1) || len==1)
		printf("%d", t);
	temp = (s[0]-'0')%b;
	for(i=1; i<len; i++)
	{
		t = (temp*10+s[i]-'0')/b;
		printf("%d",t);
		temp = (temp*10+s[i]-'0')%b;
	} 
//这个是部分A+B的那个
//是关于相同的然后多个数字就是如666 888 11111 相同的几位
这个骚操作真的骚
for(i=1;i<=n1;i++){
		b=b*10+y1;
	}
	for(i=1;i<=n2;i++){
		c=c*10+y2;
	}

 

好了,就分享到这吧,有一点用,反正咱也不是特别聪明,多看看大神的骚操作,真的很nice

  

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

i-阿松!

请给我一毛钱

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

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

打赏作者

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

抵扣说明:

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

余额充值