总结题目如下
- 1.3n+1猜想
- 2.我要通过
- 3.成绩排名
- 4,.换个格式输出
- 5.素数对猜想
- 6.数组元素的循环右移动
- 7.说反话
- 8.一元多项式求导
- 9.A+B和C
- 10.数字分类
- 11.数素数
- 12.部分A+B
- 13.A除以B
- 14.锤子剪刀布
- 15.个位数的统计
那么将这几个分为几个大类 :
- 字符串的妙用 :我要通过,说反话 剪刀石头
- 结构体的运用:成绩排名 德才论
- 精确到某一位的使用:换个格式输出 部分A+B 个位数的统计
- 末尾空格的处理方式
- 感觉不错的: 循环右移动
分析开始喽!
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