week3a:个人博客作业
1.博客上的问题
阅读下面程序,请回答如下问题:
using System;
using System.Collections.Generic;
using System.Text;
namespace FindTheNumber
{
class Program
{
static void Main(string[] args)
{
int [] rg =
{2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
20,21,22,23,24,25,26,27,28,29,30,31};
for (Int64 i = 1; i < Int64.MaxValue; i++)
{
int hit = 0;
int hit1 = -1;
int hit2 = -1;
for (int j = 0; (j < rg.Length) && (hit <=2) ; j++)
{
if ((i % rg[j]) != 0)
{
hit++;
if (hit == 1)
{
hit1 = j;
}
else if (hit == 2)
{
hit2 = j;
}
else
break;
}
}
if ((hit == 2)&& (hit1+1==hit2))
{
Console.WriteLine("found {0}", i);
}
}
}
}
}
这个题之前先搞懂这几个问题
using System;程序使用了系统的命名空间
using System.Collections.Generic;主要用来创建强类型集合,以提高类型安全和操作性能
using System.Text;引入文本操作命名空间,能够使用如StringBuilder、字符操作等类
Console.WriteLine("found {0}", i);就是printf("found%d",i);
rg.Length; 表示的是数组的长度这里是30
t64.MaxValue 表示的2的64次方减一
结果如下:
问题1:这个程序要找的是符合什么条件的数?
1,1在0——2^64-1之间找到可以被2-31中连续2项有余项,后面的数都可以整除的数
问题2:这样的数存在么?符合这一条件的最小的数是什么?
1,2待求中,打算写一个c语言程序开始计算
编了如下程序
#include<stdio.h>
#include<stdlib.h>
void Main()
{
int i,j;
int rg[] =
{ , , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , };
j = ;
for (i = ; j <=; )
{
int hit = ;
int hit1 = -;
int hit2 = -;
for (int j = ; (j < ) && (hit <= ); j++)
{
if ((i % rg[j]) != )
{
hit++;
if (hit == )
{
hit1 = j;
}
else if (hit == )
{
hit2 = j;
}
else
break;
} }
if ((hit == ) && (hit1 + == hit2))
{
printf("%d\n", i);
}
if (i == )
{
j++;
}
else
{
i++;
}
}
}
结果是没有出来,
问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间精确到分钟(电脑:单核CPU 4.0G Hz,内存和硬盘等资源充足)。
不知道该怎么做
问题4:在多核电脑上如何提高这一程序的运行效率?
程序分成2部分,在2个核中交替进行(猜想)。
1,3后面的待求
2.今天编写的程序
我想了许久,第一眼看到看到题目,一瞬间傻了眼。这次题目什么是4页,这么多要求啊,能做完吗,看了一眼发现好麻烦啊,往常也就值几行这次这么多啊。早晚都要做,不看到时候做不出了,不符合自己的作风。就仔细把书上的要求看了一遍,发现要求确实很多。一点一点做吧,就开始构思这个程序的框架是什么样子,大致写的想好后,再次看了一遍作业发现,只需做记录单词这部分。开始思考需求是什么,这里虽然只是说是单词,但是单词指的是什么,指的是英语里面的单词吗?考虑大小写吗?还是c语言中的标识符?
英语中的单词,好处理。重点就c语言的标志符。变量名由于本身的规定略微不好处理。这里面有没有注释。注释中的单词在不在记录的单词的个数了。注释有2种表示,面对这2种注释形式该如何处理。
根据以上的可能的需求,我选择了,c语言,标志符,两种注释都要考虑。
思路:
从一个文件中读取数据,使用2个长度为11的字符串。交替从文件读取数据,把这两数组中的空格,注释,回车删除,剩下数据放入另一个文件中,统计另一个文件中的标识符。(初想)
程序1版(统计英语中的单词)
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h" int main(int argc, char* argv[])
{
FILE *fp; // fp1:读取的文件
int n=; //记录单词的个数
int m=; //表示是否开始计算 m=0不 m=1 开始
char word;
fp=fopen("text.cpp","r");
if(fp==NULL)
{
printf("text.txt文件打开失败\n");
exit ();
}
while(feof(fp)==)
{
fscanf(fp,"%c",&word);
if(word<='Z'&&word>='A')
{ if(m==)
{
n++;
m=;
}
}
else if(word<='z'&&word>='a')
{
if(m==)
{
n++;
m=;
}
}
else
{
m=;
}
}
printf("%d\n",n);
fclose(fp);
return ;
}
在做的过程中发错若是这种则只需要读入一个字符就行。
程序2版(c语言中的标识符,变量名,注释)
再写这个版本的时候有再次思考自己的第一种思路是否正确,经过40分钟的思考,优化了自己的思路。没有必要使用2个字符串数组,只要使用一个字符变量不断的读取,同时也具体思考了,最新版本使用那些变量。最终形成来了。如下版本
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
int Rsecond();//读第二个文件记录单词
void Wsecond();//从原始文件中读取数据 删除 代码缩进 回车 空格 注释写入第二个程序
int main(int argc, char* argv[])
{
int n;
Wsecond();
n=Rsecond();
printf("%d",n);
return ;
}
void Wsecond()
{
char w; //表示从text1.txt文件读入的字符
int wt,f1,f2; //wt:是否可以写入文件的标志f1:是否是"//"这种注释的标志f2:是否是"/**/"这种注释
FILE *fp1,*fp2; // fp1:读取原始文件 fp2: 写入第二个文件 fp3: 读第二个文件
fp1=fopen("text1.txt","r");
if(fp1==NULL)
{
printf("text1.txt文件打开失败\n");
exit ();
}
fp2=fopen("text2.txt","w");
if(fp2==NULL)
{
printf("text2.txt文件打开失败\n");
exit ();
}
wt=;
f1=;
f2=;
while(feof(fp1)==)
{
fscanf(fp1,"%c",&w);
switch(w)
{
case ' ':
case '\t':
case '\n':
{
if(f1==)
{
f1=;
}
else
{
wt=;
}
break;
}
case '/':
{
if(feof(fp1)==)
{
fscanf(fp1,"%c",&w);
if(w=='/')
{
wt=;
f1=;
break;
}
else if(w=='*')
{
wt=;
f2=;
break;
}
}
else
break;
}
case '*':
{
if(feof(fp1)==)
{
fscanf(fp1,"%c",&w);
if(w=='/')
{
f2=;
break;
}
}
else
break;
}
}
if(wt==)
{
fprintf(fp2,"%c",w);
}
if(f1!=&&f2!=)
{
wt=;
}
}
fprintf(fp2,"\n");
fclose(fp1);
fclose(fp2);
}
int Rsecond()
{
int n=; //记录单词的个数
int m=; //表示是否开始计算 m=0不 m=1 开始
int f=; //表示标志符的第一个字符 f=0 不是 f=1 是第一个字符
char word;
FILE *fp;
fp=fopen("text2.txt","r");
if(fp==NULL)
{
printf("text2.txt文件打开失败\n");
exit ();
}
while(feof(fp)==)
{
fscanf(fp,"%c",&word);
if((word<='Z'&&word>='A')||(word<='z'&&word>='a')||word=='_')
{
if(f==)
{
f=;
if(m==)
{
n++;
m=;
}
}
}
else if(f==)
{
if(word<=''&&word>='')
{
if(m==)
{
n++;
m=;
}
}
else
{
m=;
f=;
}
}
else
{
m=;
f=;
}
}
printf("%d\n",n);
fclose(fp);
return n;
}
week3a:个人博客作业的更多相关文章
- 个人博客作业Week1
个人博客作业Week1 一.问题 通读<构建之法>我有一下几个问题 PM没有参与代码编如何进行管理. 软件工程师的职业资格考试对我们来说很有必要吗. 当我们为用户开发软件时我们需要了解用户 ...
- Java课程设计——博客作业教学数据分析系统(201521123084 林正晟)
#课程设计--博客作业教学数据分析系统(201521123084 林正晟) 1.团队课程设计博客链接 博客作业教学数据分析系统 2.个人负责模块或任务说明 学生登陆界面的前端实现和与数据库的连接 学生 ...
- Java课程设计——博客作业教学数据分析系统(201521123091 李嘉廉)
#课程设计--博客作业教学数据分析系统(201521123084 李嘉廉) 1.团队课程设计博客链接 博客作业教学数据分析系统 2.个人负责模块或任务说明 數據分析 Kmeans聚類算法實現 多元綫性 ...
- java课程设计——博客作业教学数据分析系统(201521123083 戴志斌)
目录 一.团队课程设计博客链接 二.个人负责模块或任务说明 三.自己的代码提交记录截图 四.自己负责模块或任务详细说明 五.课程设计感想 (题外话,终于可以用markdown建目录) 一.团队课程设计 ...
- Java课程设计——博客作业教学数据分析系统(201521123082 黄华林)
Java课程设计--博客作业教学数据分析系统(201521123082 黄华林) 一.团队课程设计博客链接 博客作业教学数据分析系统(From:网络五条狗) 二.个人负责模块或任务说明 1.网络爬虫 ...
- Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)
#Java语言课程设计--博客作业教学数据分析系统(个人博客) 1.团队课程设计博客链接 [博客作业教学数据分析系统(From:网络五条狗)](http://www.cnblogs.com/fanta ...
- 团队作业1——团队展示&博客作业查重系统
团队展示: 1.队名:六个核桃 2.队员学号: 王婧(201421123065).柯怡芳(201421123067组长).陈艺菡(201421123068). 钱惠(201421123071).尼玛( ...
- C语言第七次博客作业--一二维数组
一.PTA实验作业 题目1:找鞍点 1. 本题PTA提交列表 2. 设计思路 定义n,i,j,ii,jj,a[7][7],flag,max 输入n for i=0 to i=n for j=0 to ...
- 2018上C语言程序设计(高级)博客作业样例
要求一(20分) 完成PTA中题目集名为<usth-C语言高级-第1次作业>中的所有题目. 要求二 PTA作业的总结(20分+30分) 将PTA第1次作业作业中以下2道题的解题思路按照规定 ...
- C语言最后一次博客作业
1.当初你是如何做出选择计算机专业的决定的? 一开始选专业的时候,说实话我很纠结也很迷茫,对我来说,中学时代,似乎就只要考好试,做好题就可以了,对于未来想要做啥并没有那么多的规划和想法,偶尔跟基友畅聊 ...
随机推荐
- 微信小程序<每日查看>开发总结
之前一直在做iOS平台的App和SDK开发,发现微信小程序还蛮有意思的,花了将近几天的时间,从看书学习到萌发想法,最后开发出一款小应用,现在花点时间总结一番!作为自我勉励和后续继续学习动力- 先上效果 ...
- Mschart的Annotations属性使用
近期项目中用到了SPC统计功能,以前是用GDI+绘制的图表,由于坐标计算不准确,显示有偏差,于是重构了代码,将算法与图表做了分离.图表部分如果需要WPF的实现,可以参考以下两个开源项目. https: ...
- 让你的:active好好工作
在某些版本的safari上,:active伪类不生效,可以通过css和js两种方式hack一下: html <div class="button"> 点击时我应该变红 ...
- 20155207王雪纯 Exp2 后门原理与实践
20155207王雪纯 Exp2 后门原理与实践 实验步骤 一.windows获取Linux shell Windows:使用 ipconfig 命令查看当前机器IP地址. 进入ncat所在文件地址, ...
- PyQt5 笔记(01):嵌套布局
PyQt5 有四种布局:水平(QHBoxLayout).竖直(QVBoxLayout).网格(QGridLayout).表单(QFormLayout)在窗体中单一的布局应该不难,但若是比较复杂的布局, ...
- 5285: [Hnoi2018]寻宝游戏
5285: [Hnoi2018]寻宝游戏 链接 分析: 从下面依次确定运算符号,然后在确定的过程中,需要确定的位数会逐渐减少.比如最后有一个1,如果在从下往上确定了一个or 1,那么再往前可以随便选了 ...
- CF 1110 E. Magic Stones
E. Magic Stones 链接 题意: 给定两个数组,每次可以对一个数组选一个位置i($2 \leq i \leq n - 1$),让a[i]=a[i-1]+a[i+1]-a[i],或者b[i] ...
- jmeter no-gui模式动态传递场景参数
jmeter进行性能压测时,有时候需要在linux上no-gui模式下运行,为了在no-gui模式下更方便的设置脚本的运行的场景, 将脚本的线程数,运行时间设置为动态参数,可以在脚本运行时动态设置“线 ...
- Oracle10g 客户端安装与配置说明
1:百度文库 http://wenku.baidu.com/link?url=bA-FrFMaqxkoifwz-oiPeU5QmMVVJyy8rYDBryhTUCJywpkDS0VNJcObCIM8l ...
- 大数据中HBase集群搭建与配置
hbase是分布式列式存储数据库,前提条件是需要搭建hadoop集群,需要Zookeeper集群提供znode锁机制,hadoop集群已经搭建,参考 Hadoop集群搭建 ,该文主要介绍Zookeep ...