标签 源码 下的文章
Javascript 做个跳转界面
不算是成品,只是提供一个思路,学了location.repalce()
发现是分分钟的事情。
很简单的使用超时调用就搞定了。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>You won't be able to get back here</title>
</head>
<body>
<p>Enjoy this page for a second, because you won't be coming back here.</p>
<script type="text/javascript">
setTimeout(function() {
location.replace("http://codesky.me");
}, 1000);
</script>
</body>
</html>
JavaScript BOM初体验-window.open
看了半天,终于到了我觉得实战的部分了,首先是window.open
,说白了就是弹出窗口。
基础的来讲:
// 等同于 <a href="http://codesky.me" target="topFrame"></a>
window.open("http://codesky.me", "topFrame");
等价的时候用没什么前途,所以这里还有别的用法,topFrame
,也就是第二个参数,可以传入_self
,_parent
,top
以及_blank
,而第二个参数并不是已存在的窗口和框架时,会去读取第三个参数来决定,第三个参数中似乎一些都是不怎么好用的,主要是top
,width
,left
,height
位置。
SMU 算法题 情书的编码
题目:
截获了Bobwu的检讨以后,Linkinpaoger突然想到可以用自己的加密方式来加密情书。Linkinpaoger写了一封给Anonymous的情书并加密,然后发现密文中出现了很多类似ABBCCC的字符串。经过思索,Linkinpaoger决定按以下规则压缩密文:
1.任何包含k个相同字符的子串被替换为kX,X表示该子串中的唯一字符。
2.若某个这样的子串长度为1,那么省略‘1’。
按以上规则,ABBCCC将被压缩为A2B3C。现在请你帮Linkinpaoger压缩密文。
输入:
输入的第一行为一个正整数N,表示共有N组测试数据,接下来的每一行表示一组密文,密文仅由‘A'-’Z'组成。
1≤N≤100,每组密文的长度不超过10000个字符长度。
输出:
对于每组输入数据,输出一行压缩后的密文。
SMU算法题 Weijie环
在欢送会上,大家决定玩一个游戏,这个游戏叫做Weijie 环,所有的N 个人站成一圈,由一个人随意说一个数字A,从他顺时针下一个人开始顺时针数,第A个人出圈(下次就不数出圈的人),然后从第A 个人顺时针后面1 个人开始顺时针数A+1,第A+1 个人出圈,依次数A+2,A+3……,最后留在圈内的人获胜。
现在轮到BobWu 说数字,他报出了一个数字A,现在BobWu 想知道自己是第几个出列的。
详情:http://mstc.shmtu.edu.cn/oj/problem.php?cid=1003&pid=2
好像以前看过类似的题,不过没做出来,当时也没准备做……结果发现就其本身而言不用数组也可以。
SMU 算法题:BobWu的胜率统计
大家玩了很久,由于之前就有过大家玩游戏的记录,大家开始查看各自的胜率,游戏的结果对于每个人就两种,要么就赢,要么就输,今天大家玩了D 局,大家总共玩了G 局,但是当BobWu 查看胜率记录的时候,发现自己的今天的胜率恰好是一个整数PD,自己的总胜率也恰巧是一个整数PG!他开始怀疑是不是因为大家玩游戏输掉会被惩罚喝酒于是计算错了。可是由于大家都喝酒了,谁都记不得今天玩了几局(D),也记不得总共玩了几局(G),但是可以确定今天一定不可能玩超过了N 局(D≤N)现在BobWu 想知道这样的胜率究竟是有可能,还是一定计算错了。
题目详情:http://mstc.shmtu.edu.cn/oj/problem.php?cid=1003&pid=3
#include <stdio.h>
int divide(int big, int small)
{
int r;
r = big % small;
while (r != 0)
{
big = small;
small = r;
r = big % small;
}
return small;
}
int main(void)
{
unsigned int n[100], pd[100], pg[100], t, possible[100], big = 100, temp;
int i;
scanf("%u", &t);
for (i = 0; i < t; i++)
{
scanf("%u", &n[i]);
scanf("%u", &pd[i]);
scanf("%u", &pg[i]);
if (100 / divide(100, pd[i]) > n[i])
possible[i] = 0;
if( pg[i] > 100 || pg[i] == 100 && pd[i] != 100 || pg[i] == 0&& pd[i] != 0)
possible[i] = 0;
else
possible[i] = 1;
}
for (i = 0; i < t; i++)
{
switch (possible[i])
{
case 1:
printf("Case #%d: Possible\n", i + 1);
break;
case 0:
printf("Case #%d: Broken\n", i + 1);
break;
}
}
return 0;
}
在我按了半天计算器之后,终于发现,要计算的是分母,而且要最简形式,问题就转换了,可是关键是怎么求……于是我尝试了各种方法,按了好多遍计算器最终发现求公约数就可以了OTZ100 / divide(100, pd[i])
这样求出的就是分母了,没想到辗转相除法能这么用,不由得给那一次的上机题点赞了,数学不好的人科普福音啊。
估计效率也不咋的,凑合着用……
SMU 算法题:Weijie 的客人名单
题目:
去年的主人公Weijie 要离开海事大学了,于是大家决定帮他举行欢送宴会。
BobWu 很想知道究竟有多少人参加了Weijie 的欢送宴会,于是他弄来了客人名单。名单有N 行,但是其中有很多重复的名字,比方BOBWU > 和BobWu 其实指的都是同一个人,但是名单上的名字却区分大小写重复出现了。
BobWu 想知道去除重复的名字以后究竟有哪些客人。
具体可见:http://mstc.shmtu.edu.cn/oj/problem.php?cid=1003&pid=1
写了半天……结果还是问了师匠:
C 字符串中删除指定字符
题目如图:
题目意思很明显了,我们的思路其实也挺简单的,换句话说,删掉一个然后重构数组,补上那个空,一个个字符推进一格就行了嘛,不用想得太复杂(简单的来说就是偷懒)。
#include<stdio.h>
#include<string.h>
void delchar(char s[], char c);
int main(void)
{
char c;
char s[80];
printf("Input a string: ");
gets(s);
printf("Input a char: ");
scanf("%c", &c);
delchar(s, c);
printf("After deleted,the string is:%s", s);
return 0;
}
void delchar(char s[], char c)
{
int i, j, len;
len = strlen(s);
for(i = 0; i < len; i++) {
if(s[i] == c) {
for(j = i; j < len; j++)
s[j] = s[j + 1];
i = i - 1;
}
}
}
程序是同学问我了之后我改的,所以不必太在意和我的风格不符=。=
根据评论,我们改进代码(评论里师匠写的)
void delchar(char s[], char c)
{
int len;
char *p, *q;
for (p = q = s; *p; ++p) {
if (*p != c) {
*(q++) = *p;
}
}
*q = '\0';
}
C 返回数组?No!
其实早前的文章已经说过函数和数组和指针了,那么现在再来说一下归根结底还是又忘了的缘故,加上再给原来的多些扩展和补充,尽量达成互补的效果:C 几个程序,我们来聊聊数组,函数和指针
问题来源于今天三班一个学霸问我,他的程序没法运行,什么情况?
C 一道题再来说说关于scanf输入
题目如下:
一份计算机市场调查报告显示,市场上PC机的售价不同:6500,4990,5500,7200,6810,5700,5660,6900,5850,6250。编写程序,计算平均售价以及最大差价(最大差价=最高售价-最低售价)。
当然那题目给出的输入方式是不断空格的,那么难道因为这个我们就需要使用%d %d %d
直到10吗?实际上并不需要,直接输入就可以了,缓冲区这个概念应该还记得,当scanf()
读到空白字符(包括enter和space),剩下的并不是直接丢弃,而是存在缓冲区,而读取的时候从第一个非空白字符开始读取,所以,我们使用循环结构,一路用空格就行了,直到清空了缓冲区。
我们来看看这个程序的源码吧
#include <stdio.h>
#define NUM 10
int main(void)
{
int i;
float sales[NUM];
float sum = 0, max = 0, min = 0;
printf("Please input %d sales: \n", NUM);
for (i = 0; i < NUM; i++) {
scanf("%f", &sales[i]);
sum += sales[i];
if (i == 0) { /* min max 初始化 */
max = sales[i];
min = sales[i];
}
if (sales[i] > max)
max = sales[i];
if (sales[i] < min)
min = sales[i];
}
printf("ave = %f range = %g\n", sum / NUM, max - min);
return 0;
}
关于%g
这是一个很好的新东西,在C 转换说明符%g已有介绍
扩展阅读:C 一个程序说说scanf()判断