首页 > 代码库 > 140729暑期培训.txt
140729暑期培训.txt
1、对于题目给出的已知数据是一个开始时间和一个结束时间的题
第一反应会是将开始时间进行排序
但这样做比较麻烦
做题应该多换几个角度和思维
将这类题按结束时间进行排序会简单的多
2、结构体
struct move //struct是结构体函数
{
int a; //结构体成员
double b;
char c;
}num[100]; //一个结构体数组可以包含多个结构体成员,而且结构体成员的类型可以不同
int main()
{
for(i=0;i<n;i++)
scanf("%d %lf %c",&num[i].a,&num[i].b,&num[i].c);
.......
}
3、结构体一级快排
#include<stdlib.h> //qsort排序必加头文件
int cmp(const void *a,const void *b)
{
return (*(move *)a).a-(*(move *)b).a;
// move---结构体函数名
// .a---结构体成员名
// 因为是对成员a进行排序,而a又是int型,所以用的是int快排类型
// 要根据排序的成员的类型决定return后面的格式
}
int main()
{
...
qsort(num,n,sizeof(num[0]),cmp);
}
4、/*汉字机内码在计算机的表达方式的描述是,使用二个字节,每个字节最高位一位为1。
计算机中, 补码第一位是符号位, 1 表示为 负数,
所以 汉字机内码的每个字节表示的十进制数都是负数
所以统计输入字符串含有几个汉字,
只需求出字符串中小于0的字符有几个,将它除以2就得到答案 */
#include<stdio.h>
#include<string.h>
char s[1005000];
int hanzi(char a)
{
if(~(a>>8)==0)
// ~ 按位取反 ,就是使每一位上的 0变 1,1变 0;
// >> 右移运算符,右边的整形表达式指定移动的位数
return 1;
else
return 0;
}
int main()
{
int n;
int i,len,num;
scanf("%d",&n);
getchar();
while(n--)
{
gets(s);
len=strlen(s);
num=0;
for(i=0;i<len;i++)
if(hanzi(s[i]))
num++;
printf("%d\n",num/2);
}
return 0;
}
5、/*思路: n^n:
用科学计数法表示为 n^n=a*10^x
两边同时取对数 lg(n^n)=lg(a*10^x)
化简得 n*lg(n)=lg(a)+x
移位得 lg(a)=n*lg(n)-x
a=10^[n*lg(n)-x]
又因为x是 n^n 的位数
实际上就是x 就是lg(N^N) 向下取整数,表示为[lg(N^N)]
a=10^{n*lg(n)-[lg(n^n)]}
(int)a即为所求
巧妙合理的运用数学知识才是王道
活用 log 的运算技巧
*/
#include<stdio.h>
#include<math.h>
int main()
{
int n;
double i;
__int64 s,m;
scanf("%d",&n);
while(n--)
{
scanf("%I64d",&m);
i=m*log10(m*1.0);
i-=(__int64)i;
s=(__int64)pow(10,i);
//乘幂运算 pow(x,y) 表示 x 的 y 次幂
printf("%I64d\n",s);
}
return 0;
}
第一反应会是将开始时间进行排序
但这样做比较麻烦
做题应该多换几个角度和思维
将这类题按结束时间进行排序会简单的多
2、结构体
struct move //struct是结构体函数
{
int a; //结构体成员
double b;
char c;
}num[100]; //一个结构体数组可以包含多个结构体成员,而且结构体成员的类型可以不同
int main()
{
for(i=0;i<n;i++)
scanf("%d %lf %c",&num[i].a,&num[i].b,&num[i].c);
.......
}
3、结构体一级快排
#include<stdlib.h> //qsort排序必加头文件
int cmp(const void *a,const void *b)
{
return (*(move *)a).a-(*(move *)b).a;
// move---结构体函数名
// .a---结构体成员名
// 因为是对成员a进行排序,而a又是int型,所以用的是int快排类型
// 要根据排序的成员的类型决定return后面的格式
}
int main()
{
...
qsort(num,n,sizeof(num[0]),cmp);
}
4、/*汉字机内码在计算机的表达方式的描述是,使用二个字节,每个字节最高位一位为1。
计算机中, 补码第一位是符号位, 1 表示为 负数,
所以 汉字机内码的每个字节表示的十进制数都是负数
所以统计输入字符串含有几个汉字,
只需求出字符串中小于0的字符有几个,将它除以2就得到答案 */
#include<stdio.h>
#include<string.h>
char s[1005000];
int hanzi(char a)
{
if(~(a>>8)==0)
// ~ 按位取反 ,就是使每一位上的 0变 1,1变 0;
// >> 右移运算符,右边的整形表达式指定移动的位数
return 1;
else
return 0;
}
int main()
{
int n;
int i,len,num;
scanf("%d",&n);
getchar();
while(n--)
{
gets(s);
len=strlen(s);
num=0;
for(i=0;i<len;i++)
if(hanzi(s[i]))
num++;
printf("%d\n",num/2);
}
return 0;
}
5、/*思路: n^n:
用科学计数法表示为 n^n=a*10^x
两边同时取对数 lg(n^n)=lg(a*10^x)
化简得 n*lg(n)=lg(a)+x
移位得 lg(a)=n*lg(n)-x
a=10^[n*lg(n)-x]
又因为x是 n^n 的位数
实际上就是x 就是lg(N^N) 向下取整数,表示为[lg(N^N)]
a=10^{n*lg(n)-[lg(n^n)]}
(int)a即为所求
巧妙合理的运用数学知识才是王道
活用 log 的运算技巧
*/
#include<stdio.h>
#include<math.h>
int main()
{
int n;
double i;
__int64 s,m;
scanf("%d",&n);
while(n--)
{
scanf("%I64d",&m);
i=m*log10(m*1.0);
i-=(__int64)i;
s=(__int64)pow(10,i);
//乘幂运算 pow(x,y) 表示 x 的 y 次幂
printf("%I64d\n",s);
}
return 0;
}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。